From f7feb041e8d8dac5fac3c6cd44c8108e12ea4cd6 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 11 Apr 2014 11:29:31 +0200 Subject: extend FileFd test behond basic permission tests We now do Open, Write and Read (the later multiple ways) for each permission and each compressor we have configured to cover more cases and especially ensure that compressors do not change our premissions. This test is also to be credited for discovering the skippos-fix. Git-Dch: Ignore --- test/libapt/fileutl_test.cc | 109 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 99 insertions(+), 10 deletions(-) (limited to 'test/libapt/fileutl_test.cc') diff --git a/test/libapt/fileutl_test.cc b/test/libapt/fileutl_test.cc index 1d1a1a1b8..3a354814d 100644 --- a/test/libapt/fileutl_test.cc +++ b/test/libapt/fileutl_test.cc @@ -2,29 +2,93 @@ #include #include +#include #include #include #include #include +#include #include "assert.h" -// regression test for permission bug LP: #1304657 +static void assertStringEquals(char const * const expect, char const * const got, unsigned long const line) { + if (strncmp(expect, got, strlen(expect)) == 0) + return; + OutputAssertEqual(expect, "==", got, line); +} +#define strequals(x,y) assertStringEquals(x, y, __LINE__) + static bool -TestFileFdOpenPermissions(mode_t a_umask, mode_t ExpectedFilePermission) +TestFileFd(mode_t const a_umask, mode_t const ExpectedFilePermission, unsigned int const filemode, APT::Configuration::Compressor const &compressor) { FileFd f; struct stat buf; static const char* fname = "test.txt"; umask(a_umask); - f.Open(fname, FileFd::ReadWrite|FileFd::Atomic); + equals(f.Open(fname, filemode, compressor), true); + equals(f.IsOpen(), true); + equals(f.Failed(), false); + equals(umask(a_umask), a_umask); + + std::string test = "This is a test!"; + equals(f.Write(test.c_str(), test.size()), true); + equals(f.IsOpen(), true); + equals(f.Failed(), false); + f.Close(); + equals(f.IsOpen(), false); + equals(f.Failed(), false); + + equals(f.Open(fname, FileFd::ReadOnly, compressor), true); + equalsNot(f.FileSize(), 0); + equals(f.IsOpen(), true); + equals(f.Failed(), false); + + char readback[20]; + { + char const * const expect = "This"; + equals(f.Read(readback, strlen(expect)), true); + equals(f.Failed(), false); + equals(f.Eof(), false); + strequals(expect, readback); + equals(strlen(expect), f.Tell()); + } + { + char const * const expect = "test!"; + equals(f.Skip((test.size() - f.Tell()) - strlen(expect)), true); + equals(f.Read(readback, strlen(expect)), true); + equals(f.Failed(), false); + equals(f.Eof(), false); + strequals(expect, readback); + equals(test.size(), f.Tell()); + } + + equals(f.Seek(0), true); + equals(f.Read(readback, 20, true), true); + equals(f.Failed(), false); + equals(f.Eof(), true); + equals(test, readback); + equals(test.size(), strlen(readback)); + equals(f.Size(), f.Tell()); + + equals(f.Seek(0), true); + f.ReadLine(readback, 20); + equals(f.Failed(), false); + equals(f.Eof(), true); + equals(test, readback); + equals(test.size(), strlen(readback)); + equals(f.Size(), f.Tell()); + + f.Close(); + equals(f.IsOpen(), false); + equals(f.Failed(), false); + + // regression test for permission bug LP: #1304657 if (stat(fname, &buf) < 0) { _error->Errno("stat", "failed to stat"); - _error->DumpErrors(); return false; } unlink(fname); @@ -32,18 +96,43 @@ TestFileFdOpenPermissions(mode_t a_umask, mode_t ExpectedFilePermission) return true; } -int main() +static bool TestFileFd(unsigned int const filemode) { - std::vector files; + std::vector const compressors = APT::Configuration::getCompressors(); + for (std::vector::const_iterator c = compressors.begin(); c != compressors.end(); ++c) + { + if ((filemode & FileFd::ReadWrite) == FileFd::ReadWrite && + (c->Name.empty() != true && c->Binary.empty() != true)) + continue; + if (TestFileFd(0002, 0664, filemode, *c) == false || + TestFileFd(0022, 0644, filemode, *c) == false || + TestFileFd(0077, 0600, filemode, *c) == false || + TestFileFd(0026, 0640, filemode, *c) == false) + { + _error->DumpErrors(); + return false; + } + } + return true; +} - if (TestFileFdOpenPermissions(0002, 0664) == false || - TestFileFdOpenPermissions(0022, 0644) == false || - TestFileFdOpenPermissions(0077, 0600) == false || - TestFileFdOpenPermissions(0026, 0640) == false) +int main() +{ + if (TestFileFd(FileFd::WriteOnly | FileFd::Create) == false || + TestFileFd(FileFd::WriteOnly | FileFd::Create | FileFd::Empty) == false || + TestFileFd(FileFd::WriteOnly | FileFd::Create | FileFd::Exclusive) == false || + TestFileFd(FileFd::WriteOnly | FileFd::Atomic) == false || + TestFileFd(FileFd::WriteOnly | FileFd::Create | FileFd::Atomic) == false || + // short-hands for ReadWrite with these modes + TestFileFd(FileFd::WriteEmpty) == false || + TestFileFd(FileFd::WriteAny) == false || + TestFileFd(FileFd::WriteTemp) == false || + TestFileFd(FileFd::WriteAtomic) == false) { return 1; } + std::vector files; // normal match files = Glob("*.lst"); if (files.size() != 1) -- cgit v1.2.3 From bb93178b8b5c2f8021977dbc34066f0d0fb8b9b9 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 15 Apr 2014 10:21:52 +0200 Subject: clear HitEof flag in FileFd::Seek fseek and co do this to their eof-flags and it is more logic this way as we will usually seek away from the end (e.g. to re-read the file). The commit also improves the testcase further and adds a test for the binary compressor codepath (as gz, bzip2 and xz are handled by libraries) via the use of 'rev' as a 'compressor'. --- test/libapt/fileutl_test.cc | 110 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 86 insertions(+), 24 deletions(-) (limited to 'test/libapt/fileutl_test.cc') diff --git a/test/libapt/fileutl_test.cc b/test/libapt/fileutl_test.cc index 3a354814d..f3a3dd08e 100644 --- a/test/libapt/fileutl_test.cc +++ b/test/libapt/fileutl_test.cc @@ -24,7 +24,9 @@ TestFileFd(mode_t const a_umask, mode_t const ExpectedFilePermission, unsigned i { FileFd f; struct stat buf; - static const char* fname = "test.txt"; + static const char* fname = "apt-filefd-test.txt"; + if (FileExists(fname) == true) + equals(unlink(fname), 0); umask(a_umask); equals(f.Open(fname, filemode, compressor), true); @@ -32,7 +34,7 @@ TestFileFd(mode_t const a_umask, mode_t const ExpectedFilePermission, unsigned i equals(f.Failed(), false); equals(umask(a_umask), a_umask); - std::string test = "This is a test!"; + std::string test = "This is a test!\n"; equals(f.Write(test.c_str(), test.size()), true); equals(f.IsOpen(), true); equals(f.Failed(), false); @@ -42,12 +44,21 @@ TestFileFd(mode_t const a_umask, mode_t const ExpectedFilePermission, unsigned i equals(f.Failed(), false); equals(f.Open(fname, FileFd::ReadOnly, compressor), true); - equalsNot(f.FileSize(), 0); equals(f.IsOpen(), true); equals(f.Failed(), false); + equals(f.Eof(), false); + equalsNot(f.FileSize(), 0); + equals(f.Failed(), false); + equalsNot(f.ModificationTime(), 0); + equals(f.Failed(), false); - char readback[20]; + // ensure the memory is as predictably messed up +# define APT_INIT_READBACK \ + char readback[20]; \ + memset(readback, 'D', sizeof(readback)/sizeof(readback[0])); \ + readback[19] = '\0'; { + APT_INIT_READBACK char const * const expect = "This"; equals(f.Read(readback, strlen(expect)), true); equals(f.Failed(), false); @@ -56,7 +67,8 @@ TestFileFd(mode_t const a_umask, mode_t const ExpectedFilePermission, unsigned i equals(strlen(expect), f.Tell()); } { - char const * const expect = "test!"; + APT_INIT_READBACK + char const * const expect = "test!\n"; equals(f.Skip((test.size() - f.Tell()) - strlen(expect)), true); equals(f.Read(readback, strlen(expect)), true); equals(f.Failed(), false); @@ -64,22 +76,60 @@ TestFileFd(mode_t const a_umask, mode_t const ExpectedFilePermission, unsigned i strequals(expect, readback); equals(test.size(), f.Tell()); } - - equals(f.Seek(0), true); - equals(f.Read(readback, 20, true), true); - equals(f.Failed(), false); - equals(f.Eof(), true); - equals(test, readback); - equals(test.size(), strlen(readback)); - equals(f.Size(), f.Tell()); - - equals(f.Seek(0), true); - f.ReadLine(readback, 20); - equals(f.Failed(), false); - equals(f.Eof(), true); - equals(test, readback); - equals(test.size(), strlen(readback)); - equals(f.Size(), f.Tell()); + { + APT_INIT_READBACK + equals(f.Seek(0), true); + equals(f.Eof(), false); + equals(f.Read(readback, 20, true), true); + equals(f.Failed(), false); + equals(f.Eof(), true); + strequals(test.c_str(), readback); + equals(f.Size(), f.Tell()); + } + { + APT_INIT_READBACK + equals(f.Seek(0), true); + equals(f.Eof(), false); + equals(f.Read(readback, test.size(), true), true); + equals(f.Failed(), false); + equals(f.Eof(), false); + strequals(test.c_str(), readback); + equals(f.Size(), f.Tell()); + } + { + APT_INIT_READBACK + equals(f.Seek(0), true); + equals(f.Eof(), false); + unsigned long long actual; + equals(f.Read(readback, 20, &actual), true); + equals(f.Failed(), false); + equals(f.Eof(), true); + equals(test.size(), actual); + strequals(test.c_str(), readback); + equals(f.Size(), f.Tell()); + } + { + APT_INIT_READBACK + equals(f.Seek(0), true); + equals(f.Eof(), false); + f.ReadLine(readback, 20); + equals(f.Failed(), false); + equals(f.Eof(), false); + equals(test, readback); + equals(f.Size(), f.Tell()); + } + { + APT_INIT_READBACK + equals(f.Seek(0), true); + equals(f.Eof(), false); + char const * const expect = "This"; + f.ReadLine(readback, strlen(expect) + 1); + equals(f.Failed(), false); + equals(f.Eof(), false); + strequals(expect, readback); + equals(strlen(expect), f.Tell()); + } +#undef APT_INIT_READBACK f.Close(); equals(f.IsOpen(), false); @@ -91,14 +141,19 @@ TestFileFd(mode_t const a_umask, mode_t const ExpectedFilePermission, unsigned i _error->Errno("stat", "failed to stat"); return false; } - unlink(fname); + equals(unlink(fname), 0); equals(buf.st_mode & 0777, ExpectedFilePermission); return true; } static bool TestFileFd(unsigned int const filemode) { - std::vector const compressors = APT::Configuration::getCompressors(); + std::vector compressors = APT::Configuration::getCompressors(); + + // testing the (un)compress via pipe, as the 'real' compressors are usually built in via libraries + compressors.push_back(APT::Configuration::Compressor("rev", ".reversed", "rev", NULL, NULL, 42)); + //compressors.push_back(APT::Configuration::Compressor("cat", ".ident", "cat", NULL, NULL, 42)); + for (std::vector::const_iterator c = compressors.begin(); c != compressors.end(); ++c) { if ((filemode & FileFd::ReadWrite) == FileFd::ReadWrite && @@ -116,8 +171,13 @@ static bool TestFileFd(unsigned int const filemode) return true; } -int main() +int main(int const argc, char const * const * const argv) { + std::string startdir; + if (argc > 1 && DirectoryExists(argv[1]) == true) { + startdir = SafeGetCWD(); + equals(chdir(argv[1]), 0); + } if (TestFileFd(FileFd::WriteOnly | FileFd::Create) == false || TestFileFd(FileFd::WriteOnly | FileFd::Create | FileFd::Empty) == false || TestFileFd(FileFd::WriteOnly | FileFd::Create | FileFd::Exclusive) == false || @@ -131,6 +191,8 @@ int main() { return 1; } + if (startdir.empty() == false) + equals(chdir(startdir.c_str()), 0); std::vector files; // normal match -- cgit v1.2.3 From f00832cc273e52a47fb88e49849891b771de4e17 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 16 Apr 2014 17:09:37 +0200 Subject: use Google C++ Testing Framework for libapt tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit My commit 45df0ad2 from 26. Nov 2009 had a little remark: "The commit also includes a very very simple testapp." This was never intended to be permanent, but as usually… The commit adds the needed make magic to compile gtest statically as it is required and links it against a small runner. All previous testcase binaries are reimplemented in gtest and combined in this runner. While most code is a 1:1 translation some had to be rewritten like compareversion_test.cc, but the coverage remains the same. --- test/libapt/fileutl_test.cc | 272 +++++++++++++++++++++----------------------- 1 file changed, 131 insertions(+), 141 deletions(-) (limited to 'test/libapt/fileutl_test.cc') diff --git a/test/libapt/fileutl_test.cc b/test/libapt/fileutl_test.cc index f3a3dd08e..643c02297 100644 --- a/test/libapt/fileutl_test.cc +++ b/test/libapt/fileutl_test.cc @@ -2,151 +2,148 @@ #include #include +#include #include #include #include #include -#include #include -#include "assert.h" +#include -static void assertStringEquals(char const * const expect, char const * const got, unsigned long const line) { - if (strncmp(expect, got, strlen(expect)) == 0) - return; - OutputAssertEqual(expect, "==", got, line); -} -#define strequals(x,y) assertStringEquals(x, y, __LINE__) +#include "file-helpers.h" -static bool -TestFileFd(mode_t const a_umask, mode_t const ExpectedFilePermission, unsigned int const filemode, APT::Configuration::Compressor const &compressor) +static void TestFileFd(mode_t const a_umask, mode_t const ExpectedFilePermission, + unsigned int const filemode, APT::Configuration::Compressor const &compressor) { - FileFd f; - struct stat buf; + std::string trace; + strprintf(trace, "TestFileFd: Compressor: %s umask: %#o permission: %#o mode: %d", compressor.Name.c_str(), a_umask, ExpectedFilePermission, filemode); + SCOPED_TRACE(trace); + static const char* fname = "apt-filefd-test.txt"; if (FileExists(fname) == true) - equals(unlink(fname), 0); + EXPECT_EQ(0, unlink(fname)); + FileFd f; umask(a_umask); - equals(f.Open(fname, filemode, compressor), true); - equals(f.IsOpen(), true); - equals(f.Failed(), false); - equals(umask(a_umask), a_umask); + EXPECT_TRUE(f.Open(fname, filemode, compressor)); + EXPECT_TRUE(f.IsOpen()); + EXPECT_FALSE(f.Failed()); + EXPECT_EQ(umask(a_umask), a_umask); std::string test = "This is a test!\n"; - equals(f.Write(test.c_str(), test.size()), true); - equals(f.IsOpen(), true); - equals(f.Failed(), false); + EXPECT_TRUE(f.Write(test.c_str(), test.size())); + EXPECT_TRUE(f.IsOpen()); + EXPECT_FALSE(f.Failed()); f.Close(); - equals(f.IsOpen(), false); - equals(f.Failed(), false); - - equals(f.Open(fname, FileFd::ReadOnly, compressor), true); - equals(f.IsOpen(), true); - equals(f.Failed(), false); - equals(f.Eof(), false); - equalsNot(f.FileSize(), 0); - equals(f.Failed(), false); - equalsNot(f.ModificationTime(), 0); - equals(f.Failed(), false); + EXPECT_FALSE(f.IsOpen()); + EXPECT_FALSE(f.Failed()); + + EXPECT_TRUE(f.Open(fname, FileFd::ReadOnly, compressor)); + EXPECT_TRUE(f.IsOpen()); + EXPECT_FALSE(f.Failed()); + EXPECT_FALSE(f.Eof()); + EXPECT_NE(0, f.FileSize()); + EXPECT_FALSE(f.Failed()); + EXPECT_NE(0, f.ModificationTime()); + EXPECT_FALSE(f.Failed()); // ensure the memory is as predictably messed up -# define APT_INIT_READBACK \ +#define APT_INIT_READBACK \ char readback[20]; \ memset(readback, 'D', sizeof(readback)/sizeof(readback[0])); \ readback[19] = '\0'; +#define EXPECT_N_STR(expect, actual) \ + EXPECT_EQ(0, strncmp(expect, actual, strlen(expect))); + { APT_INIT_READBACK char const * const expect = "This"; - equals(f.Read(readback, strlen(expect)), true); - equals(f.Failed(), false); - equals(f.Eof(), false); - strequals(expect, readback); - equals(strlen(expect), f.Tell()); + EXPECT_TRUE(f.Read(readback, strlen(expect))); + EXPECT_FALSE(f.Failed()); + EXPECT_FALSE(f.Eof()); + EXPECT_N_STR(expect, readback); + EXPECT_EQ(strlen(expect), f.Tell()); } { APT_INIT_READBACK char const * const expect = "test!\n"; - equals(f.Skip((test.size() - f.Tell()) - strlen(expect)), true); - equals(f.Read(readback, strlen(expect)), true); - equals(f.Failed(), false); - equals(f.Eof(), false); - strequals(expect, readback); - equals(test.size(), f.Tell()); + EXPECT_TRUE(f.Skip((test.size() - f.Tell()) - strlen(expect))); + EXPECT_TRUE(f.Read(readback, strlen(expect))); + EXPECT_FALSE(f.Failed()); + EXPECT_FALSE(f.Eof()); + EXPECT_N_STR(expect, readback); + EXPECT_EQ(test.size(), f.Tell()); } { APT_INIT_READBACK - equals(f.Seek(0), true); - equals(f.Eof(), false); - equals(f.Read(readback, 20, true), true); - equals(f.Failed(), false); - equals(f.Eof(), true); - strequals(test.c_str(), readback); - equals(f.Size(), f.Tell()); + EXPECT_TRUE(f.Seek(0)); + EXPECT_FALSE(f.Eof()); + EXPECT_TRUE(f.Read(readback, 20, true)); + EXPECT_FALSE(f.Failed()); + EXPECT_TRUE(f.Eof()); + EXPECT_N_STR(test.c_str(), readback); + EXPECT_EQ(f.Size(), f.Tell()); } { APT_INIT_READBACK - equals(f.Seek(0), true); - equals(f.Eof(), false); - equals(f.Read(readback, test.size(), true), true); - equals(f.Failed(), false); - equals(f.Eof(), false); - strequals(test.c_str(), readback); - equals(f.Size(), f.Tell()); + EXPECT_TRUE(f.Seek(0)); + EXPECT_FALSE(f.Eof()); + EXPECT_TRUE(f.Read(readback, test.size(), true)); + EXPECT_FALSE(f.Failed()); + EXPECT_FALSE(f.Eof()); + EXPECT_N_STR(test.c_str(), readback); + EXPECT_EQ(f.Size(), f.Tell()); } { APT_INIT_READBACK - equals(f.Seek(0), true); - equals(f.Eof(), false); + EXPECT_TRUE(f.Seek(0)); + EXPECT_FALSE(f.Eof()); unsigned long long actual; - equals(f.Read(readback, 20, &actual), true); - equals(f.Failed(), false); - equals(f.Eof(), true); - equals(test.size(), actual); - strequals(test.c_str(), readback); - equals(f.Size(), f.Tell()); + EXPECT_TRUE(f.Read(readback, 20, &actual)); + EXPECT_FALSE(f.Failed()); + EXPECT_TRUE(f.Eof()); + EXPECT_EQ(test.size(), actual); + EXPECT_N_STR(test.c_str(), readback); + EXPECT_EQ(f.Size(), f.Tell()); } { APT_INIT_READBACK - equals(f.Seek(0), true); - equals(f.Eof(), false); + EXPECT_TRUE(f.Seek(0)); + EXPECT_FALSE(f.Eof()); f.ReadLine(readback, 20); - equals(f.Failed(), false); - equals(f.Eof(), false); - equals(test, readback); - equals(f.Size(), f.Tell()); + EXPECT_FALSE(f.Failed()); + EXPECT_FALSE(f.Eof()); + EXPECT_EQ(test, readback); + EXPECT_EQ(f.Size(), f.Tell()); } { APT_INIT_READBACK - equals(f.Seek(0), true); - equals(f.Eof(), false); + EXPECT_TRUE(f.Seek(0)); + EXPECT_FALSE(f.Eof()); char const * const expect = "This"; f.ReadLine(readback, strlen(expect) + 1); - equals(f.Failed(), false); - equals(f.Eof(), false); - strequals(expect, readback); - equals(strlen(expect), f.Tell()); + EXPECT_FALSE(f.Failed()); + EXPECT_FALSE(f.Eof()); + EXPECT_N_STR(expect, readback); + EXPECT_EQ(strlen(expect), f.Tell()); } #undef APT_INIT_READBACK f.Close(); - equals(f.IsOpen(), false); - equals(f.Failed(), false); + EXPECT_FALSE(f.IsOpen()); + EXPECT_FALSE(f.Failed()); // regression test for permission bug LP: #1304657 - if (stat(fname, &buf) < 0) - { - _error->Errno("stat", "failed to stat"); - return false; - } - equals(unlink(fname), 0); - equals(buf.st_mode & 0777, ExpectedFilePermission); - return true; + struct stat buf; + EXPECT_EQ(0, stat(fname, &buf)); + EXPECT_EQ(0, unlink(fname)); + EXPECT_EQ(ExpectedFilePermission, buf.st_mode & 0777); } -static bool TestFileFd(unsigned int const filemode) +static void TestFileFd(unsigned int const filemode) { std::vector compressors = APT::Configuration::getCompressors(); @@ -159,78 +156,71 @@ static bool TestFileFd(unsigned int const filemode) if ((filemode & FileFd::ReadWrite) == FileFd::ReadWrite && (c->Name.empty() != true && c->Binary.empty() != true)) continue; - if (TestFileFd(0002, 0664, filemode, *c) == false || - TestFileFd(0022, 0644, filemode, *c) == false || - TestFileFd(0077, 0600, filemode, *c) == false || - TestFileFd(0026, 0640, filemode, *c) == false) - { - _error->DumpErrors(); - return false; - } + TestFileFd(0002, 0664, filemode, *c); + TestFileFd(0022, 0644, filemode, *c); + TestFileFd(0077, 0600, filemode, *c); + TestFileFd(0026, 0640, filemode, *c); } - return true; } -int main(int const argc, char const * const * const argv) +TEST(FileUtlTest, FileFD) +{ + std::string const startdir = SafeGetCWD(); + EXPECT_FALSE(startdir.empty()); + std::string tempdir; + createTemporaryDirectory("filefd", tempdir); + EXPECT_EQ(0, chdir(tempdir.c_str())); + + TestFileFd(FileFd::WriteOnly | FileFd::Create); + TestFileFd(FileFd::WriteOnly | FileFd::Create | FileFd::Empty); + TestFileFd(FileFd::WriteOnly | FileFd::Create | FileFd::Exclusive); + TestFileFd(FileFd::WriteOnly | FileFd::Atomic); + TestFileFd(FileFd::WriteOnly | FileFd::Create | FileFd::Atomic); + // short-hands for ReadWrite with these modes + TestFileFd(FileFd::WriteEmpty); + TestFileFd(FileFd::WriteAny); + TestFileFd(FileFd::WriteTemp); + TestFileFd(FileFd::WriteAtomic); + + EXPECT_EQ(0, chdir(startdir.c_str())); + removeDirectory(tempdir); +} +TEST(FileUtlTest, Glob) { - std::string startdir; - if (argc > 1 && DirectoryExists(argv[1]) == true) { - startdir = SafeGetCWD(); - equals(chdir(argv[1]), 0); - } - if (TestFileFd(FileFd::WriteOnly | FileFd::Create) == false || - TestFileFd(FileFd::WriteOnly | FileFd::Create | FileFd::Empty) == false || - TestFileFd(FileFd::WriteOnly | FileFd::Create | FileFd::Exclusive) == false || - TestFileFd(FileFd::WriteOnly | FileFd::Atomic) == false || - TestFileFd(FileFd::WriteOnly | FileFd::Create | FileFd::Atomic) == false || - // short-hands for ReadWrite with these modes - TestFileFd(FileFd::WriteEmpty) == false || - TestFileFd(FileFd::WriteAny) == false || - TestFileFd(FileFd::WriteTemp) == false || - TestFileFd(FileFd::WriteAtomic) == false) - { - return 1; - } - if (startdir.empty() == false) - equals(chdir(startdir.c_str()), 0); - std::vector files; // normal match - files = Glob("*.lst"); - if (files.size() != 1) - { - _error->DumpErrors(); - return 1; - } + files = Glob("*akefile"); + EXPECT_EQ(1, files.size()); // not there files = Glob("xxxyyyzzz"); - if (files.size() != 0 || _error->PendingError()) - { - _error->DumpErrors(); - return 1; - } + EXPECT_TRUE(files.empty()); + EXPECT_FALSE(_error->PendingError()); // many matches (number is a bit random) files = Glob("*.cc"); - if (files.size() < 10) - { - _error->DumpErrors(); - return 1; - } + EXPECT_LT(10, files.size()); +} +TEST(FileUtlTest, GetTempDir) +{ + char const * const envtmp = getenv("TMPDIR"); + std::string old_tmpdir; + if (envtmp != NULL) + old_tmpdir = envtmp; - // GetTempDir() unsetenv("TMPDIR"); - equals(GetTempDir(), "/tmp"); + EXPECT_EQ("/tmp", GetTempDir()); setenv("TMPDIR", "", 1); - equals(GetTempDir(), "/tmp"); + EXPECT_EQ("/tmp", GetTempDir()); setenv("TMPDIR", "/not-there-no-really-not", 1); - equals(GetTempDir(), "/tmp"); + EXPECT_EQ("/tmp", GetTempDir()); setenv("TMPDIR", "/usr", 1); - equals(GetTempDir(), "/usr"); + EXPECT_EQ("/usr", GetTempDir()); - return 0; + unsetenv("TMPDIR"); + if (old_tmpdir.empty() == false) + setenv("TMPDIR", old_tmpdir.c_str(), 1); } -- cgit v1.2.3