Mercurial > dovecot > core-2.2
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 |
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 } |