// $Id$
//
-// Copyright (C) 2008
+// Copyright (C) 2008
// Fraunhofer Institute for Open Communication Systems (FOKUS)
// Competence Center NETwork research (NET), St. Augustin, GERMANY
// Stefan Bund <g0dil@berlios.de>
//#include "ConfigFile.test.ih"
// Custom includes
-#include "ConfigFile.hh"
+#include "Console.hh"
#include <fstream>
-#include "ScopedDirectory.hh"
-#include "ParsedCommand.hh"
#include <boost/filesystem/operations.hpp>
-#include "../../Utils/auto_unit_test.hh"
+#include <senf/Utils/auto_unit_test.hh>
#include <boost/test/test_tools.hpp>
#define prefix_
int var1 (0);
bool var2 (false);
-
+
void fun1(int v) { var1 = v; }
void fun2() { var2 = true; }
public:
TempFile(std::string const & name) : name_ (name), file_ (name_.c_str()) {}
~TempFile() { file_.close(); boost::filesystem::remove(name_); }
-
+
template <class T> TempFile & operator<<(T const & v) { file_ << v; return *this; }
enum Closer { close }; void operator<<(Closer) { file_.close(); }
std::string const & name() { return name_; }
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());
{
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;
senf::console::ScopedDirectory<> dir2;
senf::console::root().add("dir2", dir2);
- dir2.add("fun2",&fun2);
+ dir2.add("fun2",fty::Command(&fun2));
var1 = 0;
var2 = false;
}
}
-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;
}
}
-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);