# HG changeset patch # User Timo Sirainen # Date 1453810763 -7200 # Node ID 1c25fe4c74a09cc7b7896948a817035e5b0e54ef # Parent 994625f360af814cb58b311de1361bf2e96b84a3 lib: Improved test-istream-seekable unit test to check for parent stream's offset at the end diff -r 994625f360af -r 1c25fe4c74a0 src/lib/test-istream-seekable.c --- a/src/lib/test-istream-seekable.c Tue Jan 26 13:51:47 2016 +0200 +++ b/src/lib/test-istream-seekable.c Tue Jan 26 14:19:23 2016 +0200 @@ -57,8 +57,11 @@ test_assert((char)data[j] == input_string[(input->v_offset + j) % STREAM_BYTES]); } } - for (i = 0; i < STREAM_COUNT; i++) + test_assert(i_stream_read(input) == -1); + for (i = 0; i < STREAM_COUNT; i++) { + test_assert(i_stream_is_eof(streams[i])); i_stream_unref(&streams[i]); + } i_stream_unref(&input); } @@ -116,8 +119,10 @@ } size = i_stream_get_data_size(input); } - for (i = 0; i < stream_count; i++) + for (i = 0; i < stream_count; i++) { + test_assert(i_stream_is_eof(streams[i])); i_stream_unref(&streams[i]); + } i_stream_unref(&input); } @@ -136,7 +141,6 @@ streams[1] = NULL; input = i_stream_create_seekable(streams, in_str_len, fd_callback, NULL); - i_stream_unref(&streams[0]); test_assert(i_stream_read(input) == (ssize_t)in_str_len); data = i_stream_get_data(input, &size); @@ -147,8 +151,38 @@ data = i_stream_get_data(input, &size); test_assert(size == in_str_len); test_assert(memcmp(data, in_str, in_str_len) == 0); + i_stream_seek(input, size); i_stream_unref(&input); + + test_assert(streams[0]->v_offset == in_str_len); + test_assert(streams[0]->eof); + i_stream_unref(&streams[0]); + test_end(); +} + +static void test_istream_seekable_early_end(void) +{ + struct istream *input, *streams[2]; + + test_begin("istream seekable early end"); + + streams[0] = test_istream_create("stream"); + test_istream_set_size(streams[0], 3); + test_istream_set_allow_eof(streams[0], FALSE); + streams[0]->seekable = FALSE; + streams[1] = NULL; + + input = i_stream_create_seekable(streams, 1000, fd_callback, NULL); + test_assert(i_stream_read(input) == 3); + test_istream_set_size(streams[0], 5); + test_assert(i_stream_read(input) == 2); + i_stream_skip(input, 5); + i_stream_unref(&input); + + test_assert(streams[0]->v_offset == 5); + i_stream_unref(&streams[0]); + test_end(); } @@ -168,4 +202,5 @@ test_end(); test_istream_seekable_eof(); + test_istream_seekable_early_end(); }