commit 1c05878: [Minor] Add some tests
Vsevolod Stakhov
vsevolod at rspamd.com
Sat Apr 30 19:21:13 UTC 2022
Author: Vsevolod Stakhov
Date: 2022-04-03 11:58:12 +0100
URL: https://github.com/rspamd/rspamd/commit/1c0587856c9279910b21d99eb9ffa5a0e33ea19f
[Minor] Add some tests
---
src/libutil/cxx/locked_file.cxx | 71 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 71 insertions(+)
diff --git a/src/libutil/cxx/locked_file.cxx b/src/libutil/cxx/locked_file.cxx
index adac99468..cda05a6c3 100644
--- a/src/libutil/cxx/locked_file.cxx
+++ b/src/libutil/cxx/locked_file.cxx
@@ -167,4 +167,75 @@ raii_file_sink::raii_file_sink(raii_file_sink &&other) noexcept
{
}
+namespace tests {
+template<class T>
+static auto test_read_file(const T& f) {
+ auto fd = f.get_fd();
+ (void)::lseek(fd, 0, SEEK_SET);
+ std::string buf('\0', (std::size_t)f.get_size());
+ ::read(fd, buf.data(), buf.size());
+ return buf;
}
+template<class T>
+static auto test_write_file(const T& f, const std::string_view &buf) {
+ auto fd = f.get_fd();
+ (void)::lseek(fd, 0, SEEK_SET);
+ return ::write(fd, buf.data(), buf.size());
+}
+auto random_fname() {
+ const auto *tmpdir = getenv("TMPDIR");
+ if (tmpdir == nullptr) {
+ tmpdir = G_DIR_SEPARATOR_S "tmp";
+ }
+
+ std::string out_fname{tmpdir};
+ out_fname += G_DIR_SEPARATOR_S;
+
+ unsigned char hexbuf[32];
+ rspamd_random_hex(hexbuf, sizeof(hexbuf));
+ out_fname.append((const char *)hexbuf, sizeof(hexbuf));
+
+ return out_fname;
+}
+TEST_SUITE("loked files utils") {
+
+TEST_CASE("create and delete file") {
+ auto fname = random_fname();
+ {
+ auto raii_locked_file = raii_locked_file::open(fname.c_str(), O_RDONLY);
+ CHECK(raii_locked_file.has_value());
+ CHECK(::access(fname.c_str(), R_OK) == 0);
+ }
+ // File must be deleted after this call
+ CHECK(::access(fname.c_str(), R_OK) == -1);
+ CHECK(errno == ENOENT);
+ // Create one more time
+ {
+ auto raii_locked_file = raii_locked_file::open(fname.c_str(), O_RDONLY);
+ CHECK(raii_locked_file.has_value());
+ CHECK(::access(fname.c_str(), R_OK) == 0);
+ }
+ CHECK(::access(fname.c_str(), R_OK) == -1);
+ CHECK(errno == ENOENT);
+}
+
+TEST_CASE("check lock") {
+ auto fname = random_fname();
+ {
+ auto raii_locked_file = raii_locked_file::open(fname.c_str(), O_RDONLY);
+ CHECK(raii_locked_file.has_value());
+ CHECK(::access(fname.c_str(), R_OK) == 0);
+ auto raii_locked_file2 = raii_locked_file::open(fname.c_str(), O_RDONLY);
+ CHECK(!raii_locked_file2.has_value());
+ CHECK(::access(fname.c_str(), R_OK) == 0);
+ }
+ // File must be deleted after this call
+ CHECK(::access(fname.c_str(), R_OK) == -1);
+ CHECK(errno == ENOENT);
+}
+
+} // TEST_SUITE
+
+} // namespace tests
+
+} // namespace rspamd::util
More information about the Commits
mailing list