diff options
Diffstat (limited to 'unittests/core.cpp')
-rw-r--r-- | unittests/core.cpp | 27 |
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); |