File: test_bzip2.cpp

package info (click to toggle)
libosmium 2.23.0-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,564 kB
  • sloc: cpp: 53,570; sh: 148; makefile: 19
file content (152 lines) | stat: -rw-r--r-- 4,159 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#include "catch.hpp"

#include "utils.hpp"

#include <osmium/io/bzip2_compression.hpp>
#include <osmium/io/detail/read_write.hpp>

#include <string>

namespace {

void read_from_decompressor(int fd) {
    osmium::io::Bzip2Decompressor decomp{fd};
    decomp.read();
    decomp.close();
}

void write_to_compressor(int fd) {
    osmium::io::Bzip2Compressor comp{fd, osmium::io::fsync::yes};
    comp.write("foo");
    comp.close();
}

} // anonymous namespace

TEST_CASE("Invalid file descriptor of bzip2-compressed file") {
    REQUIRE_THROWS(read_from_decompressor(999));
}

TEST_CASE("Non-open file descriptor of bzip2-compressed file") {
    // 12345 is just a random file descriptor that should not be open
    REQUIRE_THROWS(read_from_decompressor(12345));
}

TEST_CASE("Empty bzip2-compressed file") {
    const int count = count_fds();

    const std::string input_file = with_data_dir("t/io/empty_file");
    const int fd = osmium::io::detail::open_for_reading(input_file);
    REQUIRE(fd > 0);

    osmium::io::Bzip2Decompressor decomp{fd};
    REQUIRE_THROWS_AS(decomp.read(), osmium::bzip2_error);
    decomp.close();

    REQUIRE(count == count_fds());
}

TEST_CASE("Read bzip2-compressed file") {
    const int count = count_fds();

    const std::string input_file = with_data_dir("t/io/data_bzip2.txt.bz2");
    const int fd = osmium::io::detail::open_for_reading(input_file);
    REQUIRE(fd > 0);

    size_t size = 0;
    std::string all;
    {
        osmium::io::Bzip2Decompressor decomp{fd};
        for (std::string data = decomp.read(); !data.empty(); data = decomp.read()) {
            size += data.size();
            all += data;
        }
        decomp.close();
    }

    REQUIRE(size >= 9);
    all.resize(8);
    REQUIRE("TESTDATA" == all);

    REQUIRE(count == count_fds());
}

TEST_CASE("Read bzip2-compressed file without explicit close") {
    const int count = count_fds();

    const std::string input_file = with_data_dir("t/io/data_bzip2.txt.bz2");
    const int fd = osmium::io::detail::open_for_reading(input_file);
    REQUIRE(fd > 0);

    size_t size = 0;
    std::string all;
    {
        osmium::io::Bzip2Decompressor decomp{fd};
        for (std::string data = decomp.read(); !data.empty(); data = decomp.read()) {
            size += data.size();
            all += data;
        }
    }

    REQUIRE(size >= 9);
    all.resize(8);
    REQUIRE("TESTDATA" == all);

    REQUIRE(count == count_fds());
}

TEST_CASE("Corrupted bzip2-compressed file") {
    const int count = count_fds();

    const std::string input_file = with_data_dir("t/io/corrupt_data_bzip2.txt.bz2");
    const int fd = osmium::io::detail::open_for_reading(input_file);
    REQUIRE(fd > 0);

    osmium::io::Bzip2Decompressor decomp{fd};
    REQUIRE_THROWS_AS(decomp.read(), osmium::bzip2_error);
    decomp.close();

    REQUIRE(count == count_fds());
}

TEST_CASE("Compressor: Invalid file descriptor for bzip2-compressed file") {
    REQUIRE_THROWS(write_to_compressor(-1));
}

TEST_CASE("Compressor: Non-open file descriptor for bzip2-compressed file") {
    // 12345 is just a random file descriptor that should not be open
    REQUIRE_THROWS(write_to_compressor(12345));
}

TEST_CASE("Write bzip2-compressed file with explicit close") {
    const int count = count_fds();

    const std::string output_file = "test_gzip_out.txt.bz2";
    const int fd = osmium::io::detail::open_for_writing(output_file, osmium::io::overwrite::allow);
    REQUIRE(fd > 0);

    osmium::io::Bzip2Compressor comp{fd, osmium::io::fsync::yes};
    comp.write("foo");
    comp.close();

    REQUIRE(count == count_fds());

    REQUIRE(osmium::file_size(output_file) > 10);
}

TEST_CASE("Write bzip2-compressed file with implicit close") {
    const int count = count_fds();

    const std::string output_file = "test_gzip_out.txt.bz2";
    const int fd = osmium::io::detail::open_for_writing(output_file, osmium::io::overwrite::allow);
    REQUIRE(fd > 1);

    {
        osmium::io::Bzip2Compressor comp{fd, osmium::io::fsync::yes};
        comp.write("foo");
    }
    REQUIRE(count == count_fds());

    REQUIRE(osmium::file_size(output_file) > 10);
}