annotate src/lib-compression/test-compression.c @ 22325:e01bc3015b2f

lib-index: Check .log.2 rotation only when syncing Instead of also whenever appending transactions to .log file. This shouldn't change the behavior much, and it's needed for the following change to work correctly.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Tue, 11 Jul 2017 15:33:56 +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 }