test-istream-seekable.c revision 3785910c303507db5f629684e6dde2cc7f83668e
5f5870385cff47efd2f58e7892f251cf13761528Timo Sirainen/* Copyright (c) 2009-2012 Dovecot authors, see the included COPYING file */
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainenstatic int fd_callback(const char **path_r, void *context ATTR_UNUSED)
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen fd = open(*path_r, O_RDWR | O_CREAT | O_TRUNC, 0600);
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainenstatic void test_istream_seekable_one(unsigned int buffer_size)
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen const unsigned char *data;
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen unsigned int i, j;
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen for (i = 0; i < STREAM_COUNT; i++) {
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen streams[i] = test_istream_create(input_string);
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen input = i_stream_create_seekable(streams, buffer_size, fd_callback, NULL);
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen for (i = 0; i/STREAM_BYTES < STREAM_COUNT; i++) {
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen test_istream_set_size(streams[i/STREAM_BYTES], (i%STREAM_BYTES) + 1);
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen for (j = 0; j < size; j++) {
4efba37e4f27b93832f6147c3a353d6d22c855c7Timo Sirainen test_assert((char)data[j] == input_string[(input->v_offset + j) % STREAM_BYTES]);
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen for (i = 0; i < STREAM_COUNT; i++)
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen const unsigned char *data;
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen unsigned char *w_data;
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen unsigned int i, j, offset, stream_count, data_len, buffer_size;
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen streams = t_new(struct istream *, stream_count + 1);
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen for (i = 0, offset = 0; i < stream_count; i++) {
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen for (j = 0; j < data_len; j++)
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen streams[i] = test_istream_create_data(w_data, data_len);
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen input = i_stream_create_seekable(streams, buffer_size, fd_callback, NULL);
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen /* first read it through */
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen for (i = 0; i < 100; i++) {
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen for (j = 0; j < size; j++) {
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen test_assert(data[j] == (input->v_offset + j) % 256);
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen for (i = 0; i < stream_count; i++)
7bcb308d0e13dfa48b483b0addccd889a77bb598Timo Sirainen const unsigned char *data;
7bcb308d0e13dfa48b483b0addccd889a77bb598Timo Sirainen streams[0] = i_stream_create_from_data(in_str, in_str_len);
7bcb308d0e13dfa48b483b0addccd889a77bb598Timo Sirainen input = i_stream_create_seekable(streams, in_str_len, fd_callback, NULL);
7bcb308d0e13dfa48b483b0addccd889a77bb598Timo Sirainen test_assert(i_stream_read(input) == (ssize_t)in_str_len);
7bcb308d0e13dfa48b483b0addccd889a77bb598Timo Sirainen test_assert(memcmp(data, in_str, in_str_len) == 0);
7bcb308d0e13dfa48b483b0addccd889a77bb598Timo Sirainen test_assert(memcmp(data, in_str, in_str_len) == 0);
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen unsigned int i;
7d548d4984752d74bfea8dc4bf1781a8996f43e7Timo Sirainen for (i = 1; i <= STREAM_BYTES*STREAM_COUNT; i++)