-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathstatus.test.cc
70 lines (62 loc) · 2.5 KB
/
status.test.cc
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
// Copyright (c) 2022 Mikael Simonsson <https://mikaelsimonsson.com>.
// SPDX-License-Identifier: BSL-1.0
#include "snn-core/file/status.hh"
#include "snn-core/unittest.hh"
#include <fcntl.h> // open
#include <unistd.h> // close
namespace snn
{
void unittest()
{
{
file::info info{container::do_not_initialize};
snn_require(file::status("/tmp", info));
snn_require(info.is_directory());
snn_require(!info.is_regular());
snn_require(info.type() == file::type::directory);
}
{
const str path{"/tmp"};
const auto info = file::status(path).value();
snn_require(info.is_directory());
snn_require(!info.is_regular());
snn_require(info.type() == file::type::directory);
snn_require((info.permission() & file::perm::all_all) == file::perm::all_all);
snn_require((info.permission() & file::perm::sticky) == file::perm::sticky);
snn_require((info.permission() & file::perm::setuid) == file::perm::none);
snn_require((info.permission() & file::perm::setgid) == file::perm::none);
}
{
const str path{"/dev/urandom"};
auto info = file::status(path).value();
snn_require(info.is_character());
snn_require(!info.is_directory());
snn_require(!info.is_regular());
snn_require(info.size() == 0);
snn_require(info.type() == file::type::character);
}
{
const auto info = file::status("status.test.cc").value();
snn_require(!info.is_directory());
snn_require(info.is_regular());
snn_require(info.size() > 1'000);
snn_require(info.type() == file::type::regular);
}
{
const int fd = ::open("status.test.cc", O_RDONLY | O_CLOEXEC);
snn_require(fd != -1);
const auto [info, err] = file::status(fd).unpack();
snn_require(!err);
snn_require(!info.is_directory());
snn_require(info.is_regular());
snn_require(info.size() > 1'000);
snn_require(info.type() == file::type::regular);
::close(fd);
}
{
snn_require(!file::status("/tmp/non_existing_389287329"));
snn_require_throws_code(file::status("/tmp/non_existing_389287329").value(),
make_error_code(ENOENT, system::error_category));
}
}
}