bcb4e51a409d94ae670de96afb8483a4f7855294Stephan Bosch/* Copyright (c) 2016-2018 Dovecot authors, see the included COPYING file */
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi os_encode = o_stream_create_escaped(os_sink, ostream_escaped_json_format);
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi /* test sending iovec */
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi test_assert(o_stream_sendv(os_encode, iov, 2) == 12);
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi test_assert(strcmp(str_c(str), "hello, world") == 0);
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi /* reset buffer */
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi str_truncate(str, 0); os_sink->offset = 0; os_encode->offset = 0;
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi /* test shrinking ostream-escaped's max buffer size */
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi test_assert(o_stream_send(os_encode, "\x15\x00!\x00\x15\x11" "123456", 12) == 12);
bcab95c672604588f1645e4a52e43f52ee567593Timo Sirainen test_assert(os_sink->offset == 2*6 + 1 + 3*6 + 6);
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi test_assert(strcmp(str_c(str), "\\u0015\\u0000!\\u0000\\u0015\\u0011123456") == 0);
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi /* reset buffer */
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi str_truncate(str, 0); os_sink->offset = 0; os_encode->offset = 0;
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi /* test shrinking sink's max buffer size */
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi ssize_t ret = o_stream_send_str(os_encode, partial_input);
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi /* send the rest */
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi ret += o_stream_send_str(os_encode, partial_input + ret);
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi test_assert(ret == (ssize_t)strlen(partial_input));
bcab95c672604588f1645e4a52e43f52ee567593Timo Sirainen test_assert((ssize_t)os_encode->offset == ret);
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi test_assert(strcmp(str_c(str), "\\u0015!\\u0001?#&") == 0);
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi os_encode = o_stream_create_escaped(os_sink, ostream_escaped_hex_format);
2935863763d8655c2c23e52591f2cbfff54811a6Aki Tuomi test_assert(o_stream_send_str(os_encode, "hello, world") == 12);
662bb64be818407c6719a69780411f7ca8d6c96fAki Tuomi test_assert(strcmp(str_c(str), "68656c6c6f2c20776f726c64") == 0);