annotate src/lib-compression/test-compression.c @ 22616:629f44740f50

cassandra: Include "prepared" when logging about prepared statement queries Mainly useful for debugging/testing.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Mon, 16 Oct 2017 15:12:12 +0300
parents eb6a6d44d977
children cb108f786fb4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21390
2e2563132d5f Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 21008
diff changeset
1 /* Copyright (c) 2014-2017 Dovecot authors, see the included COPYING file */
17329
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "lib.h"
20959
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
4 #include "buffer.h"
17329
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 #include "istream.h"
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 #include "ostream.h"
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 #include "sha1.h"
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 #include "randgen.h"
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 #include "test-common.h"
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 #include "compression.h"
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 #include <unistd.h>
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13 #include <fcntl.h>
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15 static void test_compression_handler(const struct compression_handler *handler)
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16 {
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 const char *path = "test-compression.tmp";
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 struct istream *file_input, *input;
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19 struct ostream *file_output, *output;
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20 unsigned char buf[IO_BLOCK_SIZE];
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21 const unsigned char *data;
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22 size_t size;
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23 struct sha1_ctxt sha1;
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24 unsigned char output_sha1[SHA1_RESULTLEN], input_sha1[SHA1_RESULTLEN];
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 unsigned int i;
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26 int fd;
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27 ssize_t ret;
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29 test_begin(t_strdup_printf("compression handler %s", handler->name));
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 /* write compressed data */
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 fd = open(path, O_TRUNC | O_CREAT | O_RDWR, 0600);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33 if (fd == -1)
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34 i_fatal("creat(%s) failed: %m", path);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35 file_output = o_stream_create_fd_file(fd, 0, FALSE);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36 output = handler->create_ostream(file_output, 1);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37 sha1_init(&sha1);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 /* 1) write lots of easily compressible data */
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40 memset(buf, 0, sizeof(buf));
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
41 for (i = 0; i < 1024*1024*4 / sizeof(buf); i++) {
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42 sha1_loop(&sha1, buf, sizeof(buf));
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
43 test_assert(o_stream_send(output, buf, sizeof(buf)) == sizeof(buf));
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
44 }
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46 /* 2) write uncompressible data */
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47 for (i = 0; i < 1024*128 / sizeof(buf); i++) {
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
48 random_fill_weak(buf, sizeof(buf));
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49 sha1_loop(&sha1, buf, sizeof(buf));
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50 test_assert(o_stream_send(output, buf, sizeof(buf)) == sizeof(buf));
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
51 }
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
53 /* 3) write semi-compressible data */
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54 for (i = 0; i < sizeof(buf); i++) {
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55 if (rand () % 3 == 0)
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56 buf[i] = rand() % 4;
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
57 else
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
58 buf[i] = i;
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
59 }
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
60 for (i = 0; i < 1024*128 / sizeof(buf); i++) {
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
61 sha1_loop(&sha1, buf, sizeof(buf));
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
62 test_assert(o_stream_send(output, buf, sizeof(buf)) == sizeof(buf));
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
63 }
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
64
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
65 o_stream_destroy(&output);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
66 o_stream_destroy(&file_output);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
67 sha1_result(&sha1, output_sha1);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
68
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69 /* read and uncompress the data */
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
70 sha1_init(&sha1);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
71 file_input = i_stream_create_fd(fd, IO_BLOCK_SIZE, FALSE);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
72 input = handler->create_istream(file_input, FALSE);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
73 while ((ret = i_stream_read_data(input, &data, &size, 0)) > 0) {
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
74 sha1_loop(&sha1, data, size);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
75 i_stream_skip(input, size);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
76 }
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
77 test_assert(ret == -1);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
78 i_stream_destroy(&input);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
79 i_stream_destroy(&file_input);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
80 sha1_result(&sha1, input_sha1);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
81
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
82 test_assert(memcmp(input_sha1, output_sha1, sizeof(input_sha1)) == 0);
19136
fefaa6d09a81 Replaced unlink() calls with i_unlink*() wherever possible.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
83 i_unlink(path);
21008
0009c2fcadce lib-compression: Fixed fd leak in unit test
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20999
diff changeset
84 i_close_fd(&fd);
17329
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
86 test_end();
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
87 }
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
88
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
89 static void test_compression(void)
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
90 {
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
91 unsigned int i;
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
92
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
93 for (i = 0; compression_handlers[i].name != NULL; i++) {
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
94 if (compression_handlers[i].create_istream != NULL)
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
95 test_compression_handler(&compression_handlers[i]);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
96 }
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
97 }
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
98
20959
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
99 static void test_gz(const char *str1, const char *str2)
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
100 {
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
101 const struct compression_handler *gz = compression_lookup_handler("gz");
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
102 struct ostream *buf_output, *output;
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
103 struct istream *test_input, *input;
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
104 buffer_t *buf = buffer_create_dynamic(pool_datastack_create(), 512);
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
105
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
106 if (gz == NULL || gz->create_ostream == NULL)
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
107 return; /* not compiled in */
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
108
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
109 /* write concated output */
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
110 buf_output = o_stream_create_buffer(buf);
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
111
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
112 output = gz->create_ostream(buf_output, 6);
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
113 o_stream_nsend_str(output, str1);
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
114 test_assert(o_stream_nfinish(output) == 0);
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
115 o_stream_destroy(&output);
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
116
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
117 if (str2[0] != '\0') {
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
118 output = gz->create_ostream(buf_output, 6);
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
119 o_stream_nsend_str(output, "world");
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
120 test_assert(o_stream_nfinish(output) == 0);
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
121 o_stream_destroy(&output);
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
122 }
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
123
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
124 o_stream_destroy(&buf_output);
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
125
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
126 /* read concated input */
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
127 const unsigned char *data;
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
128 size_t size;
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
129 test_input = test_istream_create_data(buf->data, buf->used);
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
130 test_istream_set_allow_eof(test_input, FALSE);
20999
dbcc7ae05ad0 Compiler warning fixes with -Wstrict-bool
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20959
diff changeset
131 input = gz->create_istream(test_input, TRUE);
20959
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
132 for (size_t i = 0; i <= buf->used; i++) {
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
133 test_istream_set_size(test_input, i);
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
134 test_assert(i_stream_read(input) >= 0);
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
135 }
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
136 test_istream_set_allow_eof(test_input, TRUE);
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
137 test_assert(i_stream_read(input) == -1);
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
138 test_assert(input->stream_errno == 0);
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
139
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
140 data = i_stream_get_data(input, &size);
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
141 test_assert(size == strlen(str1)+strlen(str2) &&
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
142 memcmp(data, str1, strlen(str1)) == 0 &&
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
143 memcmp(data+strlen(str1), str2, strlen(str2)) == 0);
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
144 i_stream_unref(&input);
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
145 i_stream_unref(&test_input);
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
146 }
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
147
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
148 static void test_gz_concat(void)
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
149 {
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
150 test_begin("gz concat");
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
151 test_gz("hello", "world");
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
152 test_end();
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
153 }
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
154
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
155 static void test_gz_no_concat(void)
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
156 {
21644
eb6a6d44d977 lib-compression: Fix test-compression to build without zlib
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21527
diff changeset
157 test_begin("gz no concat");
20959
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
158 test_gz("hello", "");
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
159 test_end();
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
160 }
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
161
21527
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
162 static void test_gz_large_header(void)
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
163 {
21644
eb6a6d44d977 lib-compression: Fix test-compression to build without zlib
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21527
diff changeset
164 const struct compression_handler *gz = compression_lookup_handler("gz");
21527
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
165 static const unsigned char gz_input[] = {
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
166 0x1f, 0x8b, 0x08, 0x08,
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
167 'a','a','a','a','a','a','a','a','a','a','a',
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
168 0
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
169 };
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
170 struct istream *file_input, *input;
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
171 size_t i;
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
172
21644
eb6a6d44d977 lib-compression: Fix test-compression to build without zlib
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21527
diff changeset
173 if (gz == NULL || gz->create_istream == NULL)
eb6a6d44d977 lib-compression: Fix test-compression to build without zlib
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21527
diff changeset
174 return; /* not compiled in */
eb6a6d44d977 lib-compression: Fix test-compression to build without zlib
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21527
diff changeset
175
21527
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
176 test_begin("gz large header");
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
177
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
178 /* max buffer size smaller than gz header */
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
179 for (i = 1; i < sizeof(gz_input); i++) {
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
180 file_input = test_istream_create_data(gz_input, sizeof(gz_input));
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
181 test_istream_set_size(file_input, i);
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
182 test_istream_set_max_buffer_size(file_input, i);
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
183
21644
eb6a6d44d977 lib-compression: Fix test-compression to build without zlib
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21527
diff changeset
184 input = gz->create_istream(file_input, FALSE);
21527
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
185 test_assert_idx(i_stream_read(input) == 0, i);
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
186 test_assert_idx(i_stream_read(input) == -1 &&
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
187 input->stream_errno == EINVAL, i);
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
188 i_stream_unref(&input);
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
189 i_stream_unref(&file_input);
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
190 }
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
191
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
192 /* max buffer size is exactly the gz header */
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
193 file_input = test_istream_create_data(gz_input, sizeof(gz_input));
21644
eb6a6d44d977 lib-compression: Fix test-compression to build without zlib
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21527
diff changeset
194 input = gz->create_istream(file_input, FALSE);
21527
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
195 test_istream_set_size(input, i);
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
196 test_istream_set_allow_eof(input, FALSE);
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
197 test_istream_set_max_buffer_size(input, i);
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
198 test_assert(i_stream_read(input) == 0);
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
199 i_stream_unref(&input);
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
200 i_stream_unref(&file_input);
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
201
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
202 test_end();
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
203 }
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
204
20958
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
205 static void test_uncompress_file(const char *path)
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
206 {
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
207 const struct compression_handler *handler;
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
208 struct istream *input, *file_input;
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
209 const unsigned char *data;
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
210 size_t size;
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
211
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
212 handler = compression_lookup_handler_from_ext(path);
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
213 if (handler == NULL)
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
214 i_fatal("Can't detect compression algorithm from path %s", path);
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
215 if (handler->create_istream == NULL)
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
216 i_fatal("Support not compiled in for %s", handler->name);
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
217
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
218 file_input = i_stream_create_file(path, IO_BLOCK_SIZE);
20999
dbcc7ae05ad0 Compiler warning fixes with -Wstrict-bool
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20959
diff changeset
219 input = handler->create_istream(file_input, TRUE);
20958
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
220 while (i_stream_read_more(input, &data, &size) > 0) {
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
221 if (write(STDOUT_FILENO, data, size) < 0)
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
222 break;
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
223 i_stream_skip(input, size);
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
224 }
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
225 i_stream_destroy(&input);
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
226 }
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
227
17329
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
228 static void test_compress_file(const char *in_path, const char *out_path)
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
229 {
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
230 const struct compression_handler *handler;
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
231 struct istream *input, *file_input;
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
232 struct ostream *output, *file_output;
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
233 int fd_in, fd_out;
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
234 struct sha1_ctxt sha1;
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
235 unsigned char output_sha1[SHA1_RESULTLEN], input_sha1[SHA1_RESULTLEN];
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
236 const unsigned char *data;
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
237 size_t size;
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
238 ssize_t ret;
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
239
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
240 handler = compression_lookup_handler_from_ext(out_path);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
241 if (handler == NULL)
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
242 i_fatal("Can't detect compression algorithm from path %s", out_path);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
243 if (handler->create_ostream == NULL)
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
244 i_fatal("Support not compiled in for %s", handler->name);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
245
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
246 /* write the compressed output file */
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
247 fd_in = open(in_path, O_RDONLY);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
248 if (fd_in == -1)
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
249 i_fatal("open(%s) failed: %m", in_path);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
250 fd_out = open(out_path, O_TRUNC | O_CREAT | O_RDWR, 0600);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
251 if (fd_out == -1)
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
252 i_fatal("creat(%s) failed: %m", out_path);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
253
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
254 sha1_init(&sha1);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
255 file_output = o_stream_create_fd_file(fd_out, 0, FALSE);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
256 output = handler->create_ostream(file_output, 1);
17480
b67c1c9bf1a5 Use the new [io]_stream_create_fd_*autoclose() functions wherever possible.
Timo Sirainen <tss@iki.fi>
parents: 17329
diff changeset
257 input = i_stream_create_fd_autoclose(&fd_in, IO_BLOCK_SIZE);
17329
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
258 while (i_stream_read_data(input, &data, &size, 0) > 0) {
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
259 sha1_loop(&sha1, data, size);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
260 o_stream_nsend(output, data, size);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
261 i_stream_skip(input, size);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
262 }
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
263 if (o_stream_nfinish(output) < 0) {
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
264 i_fatal("write(%s) failed: %s",
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
265 out_path, o_stream_get_error(output));
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
266 }
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
267 i_stream_destroy(&input);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
268 o_stream_destroy(&output);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
269 o_stream_destroy(&file_output);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
270 sha1_result(&sha1, output_sha1);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
271
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
272 /* verify that we can read the compressed file */
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
273 sha1_init(&sha1);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
274 file_input = i_stream_create_fd(fd_out, IO_BLOCK_SIZE, FALSE);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
275 input = handler->create_istream(file_input, FALSE);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
276 while ((ret = i_stream_read_data(input, &data, &size, 0)) > 0) {
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
277 sha1_loop(&sha1, data, size);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
278 i_stream_skip(input, size);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
279 }
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
280 i_stream_destroy(&input);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
281 i_stream_destroy(&file_input);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
282 sha1_result(&sha1, input_sha1);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
283
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
284 if (memcmp(input_sha1, output_sha1, sizeof(input_sha1)) != 0)
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
285 i_fatal("Decompression couldn't get the original input");
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
286 i_close_fd(&fd_out);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
287 }
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
288
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
289 int main(int argc, char *argv[])
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
290 {
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
291 static void (*test_functions[])(void) = {
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
292 test_compression,
20959
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
293 test_gz_concat,
7aca58261697 lib-compression: Added unit tests for reading .gz files
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20958
diff changeset
294 test_gz_no_concat,
21527
09c06f63c8c4 lib-compress: Fix assert-crash when .gz header size exceeds buffer max length
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
295 test_gz_large_header,
17329
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
296 NULL
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
297 };
20958
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
298 if (argc == 2) {
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
299 test_uncompress_file(argv[1]);
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
300 return 0;
330b83e97c5f lib-compression: Added file uncompression support for test-compression
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
301 }
17329
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
302 if (argc == 3) {
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
303 test_compress_file(argv[1], argv[2]);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
304 return 0;
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
305 }
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
306 return test_run(test_functions);
6b40179a6868 lib-compression: Added some unit testing for lib-compression.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
307 }