X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FUtils%2FConsole%2FConfigFile.test.cc;h=27835bf5fd055458a562702c370ba8c953bc26e2;hb=4101c2b818ec67e7469ebb44f030eed2185c4ab0;hp=74960a62b1e1597e4634f05eca524c1691a077b9;hpb=601d1f509f5bb24df167a4dd5a20da67a0af9af8;p=senf.git diff --git a/senf/Utils/Console/ConfigFile.test.cc b/senf/Utils/Console/ConfigFile.test.cc index 74960a6..27835bf 100644 --- a/senf/Utils/Console/ConfigFile.test.cc +++ b/senf/Utils/Console/ConfigFile.test.cc @@ -1,6 +1,6 @@ // $Id$ // -// Copyright (C) 2008 +// Copyright (C) 2008 // Fraunhofer Institute for Open Communication Systems (FOKUS) // Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund @@ -27,23 +27,21 @@ //#include "ConfigFile.test.ih" // Custom includes -#include "ConfigFile.hh" +#include "Console.hh" #include -#include "ScopedDirectory.hh" -#include "ParsedCommand.hh" #include -#include "../../Utils/auto_unit_test.hh" +#include #include #define prefix_ -///////////////////////////////cc.p//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// namespace { int var1 (0); bool var2 (false); - + void fun1(int v) { var1 = v; } void fun2() { var2 = true; } @@ -52,7 +50,7 @@ namespace { public: TempFile(std::string const & name) : name_ (name), file_ (name_.c_str()) {} ~TempFile() { file_.close(); boost::filesystem::remove(name_); } - + template TempFile & operator<<(T const & v) { file_ << v; return *this; } enum Closer { close }; void operator<<(Closer) { file_.close(); } std::string const & name() { return name_; } @@ -61,18 +59,31 @@ namespace { std::string name_; std::ofstream file_; }; - + } -BOOST_AUTO_UNIT_TEST(configFile) +#define SENF_CHECK_THROW_SYSTEMEXCEPTION( expr, errorNumber, msg) \ + try { \ + BOOST_TEST_PASSPOINT(); \ + expr; \ + BOOST_ERROR( "senf::SystemException is expected"); \ + } catch( senf::SystemException const & ex ) { \ + BOOST_CHECK( ex.anyOf( errorNumber)); \ + BOOST_CHECK( ex.message().find(msg) != std::string::npos); \ + } \ + + +SENF_AUTO_UNIT_TEST(configFile) { + namespace fty = senf::console::factory; + TempFile cfgf ("test.cfg"); - cfgf << "dir1/fun1 10;\n" + cfgf << "dir1/fun1 10;\n" << TempFile::close; - + senf::console::ScopedDirectory<> dir1; senf::console::root().add("dir1", dir1); - dir1.add("fun1",&fun1); + dir1.add("fun1",fty::Command(&fun1)); { senf::console::ConfigFile cfg (cfgf.name()); @@ -93,22 +104,32 @@ BOOST_AUTO_UNIT_TEST(configFile) { senf::console::ConfigFile cfg ("i don't exist"); + SENF_CHECK_THROW_SYSTEMEXCEPTION(cfg.parse(), ENOENT, "i don't exist"); cfg.ignoreMissing(); SENF_CHECK_NO_THROW( cfg.parse() ); } + { + std::string etc_shaddow ("/etc/shadow"); + if (getuid() != 0 && boost::filesystem::exists(etc_shaddow)) { + senf::console::ConfigFile cfg (etc_shaddow); + SENF_CHECK_THROW_SYSTEMEXCEPTION( cfg.parse(), EACCES, etc_shaddow); + } + } } -BOOST_AUTO_UNIT_TEST(configFileRestrict) +SENF_AUTO_UNIT_TEST(configFileRestrict) { + namespace fty = senf::console::factory; + TempFile cfgf ("test.cfg"); cfgf << "dir1/fun1 10;\n" << "dir2/fun2;\n" << TempFile::close; - + senf::console::ScopedDirectory<> dir1; senf::console::root().add("dir1", dir1); - dir1.add("fun1",&fun1); - + dir1.add("fun1",fty::Command(&fun1)); + { var1 = 0; var2 = false; @@ -121,7 +142,7 @@ BOOST_AUTO_UNIT_TEST(configFileRestrict) senf::console::ScopedDirectory<> dir2; senf::console::root().add("dir2", dir2); - dir2.add("fun2",&fun2); + dir2.add("fun2",fty::Command(&fun2)); var1 = 0; var2 = false; @@ -132,22 +153,24 @@ BOOST_AUTO_UNIT_TEST(configFileRestrict) } } -BOOST_AUTO_UNIT_TEST(configFileSkipGroup) +SENF_AUTO_UNIT_TEST(configFileSkipGroup) { + namespace fty = senf::console::factory; + TempFile cfgf ("test.cfg"); cfgf << "dir1/fun1 10;\n" << "dir2 { dir3 { fun2; } fun1 5; }" << TempFile::close; - + senf::console::ScopedDirectory<> dir1; senf::console::root().add("dir1", dir1); - dir1.add("fun1",&fun1); - + dir1.add("fun1",fty::Command(&fun1)); + senf::console::ScopedDirectory<> dir2; senf::console::root().add("dir2", dir2); - - dir2.mkdir("dir3").add("fun2", &fun2); - dir2.add("fun1", &fun1); + + dir2.add("dir3",fty::Directory()).add("fun2", fty::Command(&fun2)); + dir2.add("fun1", fty::Command(&fun1)); { var1 = 0; @@ -173,26 +196,28 @@ BOOST_AUTO_UNIT_TEST(configFileSkipGroup) } } -BOOST_AUTO_UNIT_TEST(configRestrictAndLink) +SENF_AUTO_UNIT_TEST(configRestrictAndLink) { + namespace fty = senf::console::factory; + TempFile cfgf ("test.cfg"); cfgf << "dir1/fun1 10;\n" << "link1 { dir3 { fun2; } fun1 5; }" << TempFile::close; - + senf::console::ScopedDirectory<> dir1; senf::console::root().add("dir1", dir1); - dir1.add("fun1",&fun1); - + dir1.add("fun1",fty::Command(&fun1)); + senf::console::ScopedDirectory<> dir2; dir1.add("dir2", dir2); - - dir2.mkdir("dir3").add("fun2", &fun2); - dir2.add("fun1", &fun1); + + dir2.add("dir3",fty::Directory()).add("fun2", fty::Command(&fun2)); + dir2.add("fun1", fty::Command(&fun1)); senf::console::ScopedDirectory<> dir4; senf::console::root().add("dir4", dir4); - dir4.link("link1", dir2); + dir4.add("link1", fty::Link(dir2)); { senf::console::ConfigFile cfg (cfgf.name(), dir4); @@ -207,7 +232,7 @@ BOOST_AUTO_UNIT_TEST(configRestrictAndLink) } } -///////////////////////////////cc.e//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_