123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- #include "util.h"
- #include <fstream>
- #include <cppunit/extensions/HelperMacros.h>
- #ifdef _WIN32
- static char* mkdtemp(char* tpl)
- {
- char* dn = mktemp(tpl);
- if (!dn) {
- return dn;
- }
- if (mkdir(dn)) {
- return nullptr;
- }
- return dn;
- }
- #endif // _WIN32
- namespace aria2 {
- class UtilFsTest : public CppUnit::TestFixture {
- CPPUNIT_TEST_SUITE(UtilFsTest);
- CPPUNIT_TEST(testSpace);
- CPPUNIT_TEST(testSpacePwd);
- CPPUNIT_TEST(testSpaceDownwardsFile);
- CPPUNIT_TEST(testSpaceDownwardsDir);
- CPPUNIT_TEST_SUITE_END();
- private:
- public:
- void setUp() {}
- void testSpace();
- void testSpacePwd();
- void testSpaceDownwardsFile();
- void testSpaceDownwardsDir();
- };
- CPPUNIT_TEST_SUITE_REGISTRATION(UtilFsTest);
- void UtilFsTest::testSpace()
- {
- const char* tmpl = "aria2.test.tmp.XXXXXX";
- char* tpl = strdup(tmpl); // lets just leak this
- CPPUNIT_ASSERT(tpl);
- char* tmp = mkdtemp(tpl);
- CPPUNIT_ASSERT(tmp);
- std::error_code ec;
- util::filesystem::space(tmp, ec);
- CPPUNIT_ASSERT(!ec);
- rmdir(tmp);
- auto rv = util::filesystem::space(tmp, ec);
- CPPUNIT_ASSERT(ec);
- CPPUNIT_ASSERT_EQUAL(rv.available, static_cast<uintmax_t>(-1));
- CPPUNIT_ASSERT_EQUAL(rv.capacity, static_cast<uintmax_t>(-1));
- CPPUNIT_ASSERT_EQUAL(rv.free, static_cast<uintmax_t>(-1));
- }
- void UtilFsTest::testSpacePwd()
- {
- std::error_code ec;
- util::filesystem::space(nullptr, ec);
- CPPUNIT_ASSERT(!ec);
- util::filesystem::space("", ec);
- CPPUNIT_ASSERT(!ec);
- util::filesystem::space(".", ec);
- CPPUNIT_ASSERT(!ec);
- util::filesystem::space("doesnotexit", ec);
- CPPUNIT_ASSERT(ec);
- util::filesystem::space_downwards("doesnotexit", ec);
- CPPUNIT_ASSERT(!ec);
- }
- void UtilFsTest::testSpaceDownwardsFile()
- {
- const char* tmpl = "aria2.test.tmp.XXXXXX";
- char* tpl = strdup(tmpl); // lets just leak this
- CPPUNIT_ASSERT(tpl);
- char* tmp = mkdtemp(tpl);
- CPPUNIT_ASSERT(tmp);
- std::string tn(tmp);
- tn += "/aria2.tmp";
- {
- std::ofstream s(tn);
- std::error_code ec;
- std::string tn2(tn);
- tn2 += "/something.else.entirely";
- util::filesystem::space(tn2.c_str(), ec);
- CPPUNIT_ASSERT_MESSAGE(tn2, ec);
- util::filesystem::space_downwards(tn2.c_str(), ec);
- CPPUNIT_ASSERT_MESSAGE(tn2, !ec);
- }
- unlink(tn.c_str());
- rmdir(tmp);
- }
- void UtilFsTest::testSpaceDownwardsDir()
- {
- const char* tmpl = "aria2.test.tmp.XXXXXX";
- char* tpl = strdup(tmpl); // lets just leak this
- CPPUNIT_ASSERT(tpl);
- char* tmp = mkdtemp(tpl);
- CPPUNIT_ASSERT(tmp);
- std::string tn(tmp);
- tn += "/something.else.entirely";
- std::error_code ec;
- auto rv = util::filesystem::space(tn.c_str(), ec);
- CPPUNIT_ASSERT_MESSAGE(tn, ec);
- rv = util::filesystem::space_downwards(tn.c_str(), ec);
- rmdir(tmp);
- CPPUNIT_ASSERT_MESSAGE(tn, !ec);
- }
- } // namespace aria2
|