summaryrefslogtreecommitdiff
path: root/unittests/core.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'unittests/core.cpp')
-rw-r--r--unittests/core.cpp27
1 files changed, 25 insertions, 2 deletions
diff --git a/unittests/core.cpp b/unittests/core.cpp
index fb2f477..960b491 100644
--- a/unittests/core.cpp
+++ b/unittests/core.cpp
@@ -125,38 +125,46 @@ BOOST_DATA_TEST_CASE(
{
BOOST_CHECK_EQUAL(EACCES, v->access(env, path, W_OK));
}
+
BOOST_DATA_TEST_CASE(accessDirs, DIRPATHS, path)
{
BOOST_CHECK_EQUAL(0, v->access(env, path, R_OK));
BOOST_CHECK_EQUAL(0, v->access(env, path, X_OK));
}
+
BOOST_DATA_TEST_CASE(accessRead, REGPATHS, path)
{
BOOST_CHECK_EQUAL(0, v->access(env, path, R_OK));
BOOST_CHECK_EQUAL(EACCES, v->access(env, path, X_OK));
}
+
BOOST_DATA_TEST_CASE(accessLink, LINKPATHS, path)
{
BOOST_CHECK_EQUAL(0, v->access(env, path, R_OK));
BOOST_CHECK_EQUAL(0, v->access(env, path, X_OK));
}
+
BOOST_DATA_TEST_CASE(accessExec, EXECPATHS, path)
{
BOOST_CHECK_EQUAL(0, v->access(env, path, R_OK));
BOOST_CHECK_EQUAL(0, v->access(env, path, X_OK));
}
+
BOOST_DATA_TEST_CASE(accessInval, INVALIDPATHS * btdata::make({R_OK, X_OK}), path, mode)
{
BOOST_CHECK_EQUAL(EINVAL, v->access(env, path, mode));
}
+
BOOST_DATA_TEST_CASE(accessBad, BADPATHS * btdata::make({R_OK, X_OK}), path, mode)
{
BOOST_CHECK_EQUAL(ENOENT, v->access(env, path, mode));
}
+
BOOST_DATA_TEST_CASE(statInval, INVALIDPATHS, path)
{
BOOST_CHECK_THROW_SYSTEMERROR(v->getattr(env, path), EINVAL);
}
+
BOOST_DATA_TEST_CASE(statBad, BADPATHS, path)
{
BOOST_CHECK_THROW_SYSTEMERROR(v->getattr(env, path), ENOENT);
@@ -167,8 +175,8 @@ const auto FILEMODE = S_IFREG | S_IRUSR | S_IRGRP | S_IROTH;
const auto EXECMODE = FILEMODE | S_IXUSR | S_IXGRP | S_IXOTH;
const auto LINKMODE = S_IFLNK | S_IRUSR | S_IRGRP | S_IROTH;
const time_t COMMIT_TIME = 1563621030;
-const std::string USER = "root";
-const std::string GROUP = "root";
+constexpr std::string USER = "root";
+constexpr std::string GROUP = "root";
BOOST_DATA_TEST_CASE(statDirs, DIRPATHS, path)
{
@@ -181,6 +189,7 @@ BOOST_DATA_TEST_CASE(statDirs, DIRPATHS, path)
BOOST_CHECK_EQUAL(USER, attr.uid);
BOOST_CHECK_EQUAL(GROUP, attr.gid);
}
+
BOOST_DATA_TEST_CASE(statFiles, REGPATHS, path)
{
const auto attr = v->getattr(env, path);
@@ -192,6 +201,7 @@ BOOST_DATA_TEST_CASE(statFiles, REGPATHS, path)
BOOST_CHECK_EQUAL(USER, attr.uid);
BOOST_CHECK_EQUAL(GROUP, attr.gid);
}
+
BOOST_DATA_TEST_CASE(statExecs, EXECPATHS, path)
{
const auto attr = v->getattr(env, path);
@@ -203,6 +213,7 @@ BOOST_DATA_TEST_CASE(statExecs, EXECPATHS, path)
BOOST_CHECK_EQUAL(USER, attr.uid);
BOOST_CHECK_EQUAL(GROUP, attr.gid);
}
+
BOOST_DATA_TEST_CASE(statSymlink, LINKPATHS, path)
{
const auto attr = v->getattr(env, path);
@@ -219,10 +230,12 @@ BOOST_DATA_TEST_CASE(readlinkInval, INVALIDPATHS + DIRPATHS + REGPATHS + EXECPAT
{
BOOST_CHECK_THROW_SYSTEMERROR(v->readlink(env, path), EINVAL);
}
+
BOOST_DATA_TEST_CASE(readlinkBad, BADPATHS + MISSINGPATHS, path)
{
BOOST_CHECK_THROW_SYSTEMERROR(v->readlink(env, path), ENOENT);
}
+
BOOST_DATA_TEST_CASE(readlink, LINKPATHS ^ btdata::make({"executable"}), path, target)
{
BOOST_CHECK_EQUAL(target, v->readlink(env, path));
@@ -232,14 +245,17 @@ BOOST_DATA_TEST_CASE(openDirInval, INVALIDPATHS, path)
{
BOOST_CHECK_THROW_SYSTEMERROR(v->opendir(env, path), EINVAL);
}
+
BOOST_DATA_TEST_CASE(openDirBad, BADPATHS + MISSINGPATHS, path)
{
BOOST_CHECK_THROW_SYSTEMERROR(v->opendir(env, path), ENOENT);
}
+
BOOST_DATA_TEST_CASE(openDirNotDir, REGPATHS + LINKPATHS + EXECPATHS, path)
{
BOOST_CHECK_THROW_SYSTEMERROR(v->opendir(env, path), ENOTDIR);
}
+
const auto DIRCONTENTS = btdata::make<std::vector<std::string>>({
{".gitignore", "Jamroot.jam", "src", "unittests"},
{"Jamfile.jam", "blob.cpp", "blob.h", "dir.cpp", "dir.h", "git.cpp", "git.h", "main.cpp", "repo.cpp", "repo.h",
@@ -247,6 +263,7 @@ const auto DIRCONTENTS = btdata::make<std::vector<std::string>>({
{"Jamfile.jam", "core.cpp", "fixtures", "mockDefs.cpp", "mockDefs.h"},
{"executable", "symlink"},
});
+
BOOST_DATA_TEST_CASE(openDirRead, DIRPATHS ^ DIRCONTENTS, path, contents)
{
auto dir = v->opendir(env, path);
@@ -256,6 +273,7 @@ BOOST_DATA_TEST_CASE(openDirRead, DIRPATHS ^ DIRCONTENTS, path, contents)
BOOST_CHECK_EQUAL_COLLECTIONS(names.begin(), names.end(), contents.begin(), contents.end());
dir->close();
}
+
const auto DIRCONTENTMODES = btdata::make<std::vector<std::tuple<std::string, int>>>({
{{".gitignore", FILEMODE}, {"Jamroot.jam", FILEMODE}, {"src", DIRMODE}, {"unittests", DIRMODE}},
{{"Jamfile.jam", FILEMODE}, {"blob.cpp", FILEMODE}, {"blob.h", FILEMODE}, {"dir.cpp", FILEMODE},
@@ -265,6 +283,7 @@ const auto DIRCONTENTMODES = btdata::make<std::vector<std::tuple<std::string, in
{"mockDefs.h", FILEMODE}},
{{"executable", EXECMODE}, {"symlink", LINKMODE}},
});
+
BOOST_DATA_TEST_CASE(openDirList, DIRPATHS ^ DIRCONTENTMODES, path, contents)
{
auto dir = v->opendir(env, path);
@@ -291,18 +310,22 @@ BOOST_DATA_TEST_CASE(openInval, INVALIDPATHS, path)
{
BOOST_CHECK_THROW_SYSTEMERROR(v->open(env, path, O_RDONLY), EINVAL);
}
+
BOOST_DATA_TEST_CASE(openBad, BADPATHS + MISSINGPATHS, path)
{
BOOST_CHECK_THROW_SYSTEMERROR(v->open(env, path, O_RDONLY), ENOENT);
}
+
BOOST_DATA_TEST_CASE(openNotFileDir, DIRPATHS, path)
{
BOOST_CHECK_THROW_SYSTEMERROR(v->open(env, path, O_RDONLY), EISDIR);
}
+
BOOST_DATA_TEST_CASE(openNotFileLink, LINKPATHS, path)
{
BOOST_CHECK_THROW_SYSTEMERROR(v->open(env, path, O_RDONLY), ELOOP);
}
+
BOOST_DATA_TEST_CASE(openFileROFSOps, REGPATHS + EXECPATHS, path)
{
auto f = v->open(env, path, O_RDONLY);