Mercurial > dovecot > core-2.2
annotate src/lib-compression/test-compression.c @ 22616:629f44740f50
cassandra: Include "prepared" when logging about prepared statement queries
Mainly useful for debugging/testing.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Mon, 16 Oct 2017 15:12:12 +0300 |
parents | eb6a6d44d977 |
children | cb108f786fb4 |
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 } |