X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FUtils%2FConsole%2FConfigFile.test.cc;h=13fcbc23a1a8fc66eb962cbcd9d0913a15dd319e;hb=8a6697d11e9a6557d9a5c42b4052666fce32bc10;hp=5d424c01256617c954e0b9d162baeab57bd7ee26;hpb=f13780e9e4da7df981d6f6542fbdc714beb34765;p=senf.git diff --git a/senf/Utils/Console/ConfigFile.test.cc b/senf/Utils/Console/ConfigFile.test.cc index 5d424c0..13fcbc2 100644 --- a/senf/Utils/Console/ConfigFile.test.cc +++ b/senf/Utils/Console/ConfigFile.test.cc @@ -1,24 +1,29 @@ // $Id$ // -// Copyright (C) 2008 +// Copyright (C) 2008 // Fraunhofer Institute for Open Communication Systems (FOKUS) -// Competence Center NETwork research (NET), St. Augustin, GERMANY -// Stefan Bund // -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. +// The contents of this file are subject to the Fraunhofer FOKUS Public License +// Version 1.0 (the "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// http://senf.berlios.de/license.html // -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// The Fraunhofer FOKUS Public License Version 1.0 is based on, +// but modifies the Mozilla Public License Version 1.1. +// See the full license text for the amendments. // -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the -// Free Software Foundation, Inc., -// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// Software distributed under the License is distributed on an "AS IS" basis, +// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +// for the specific language governing rights and limitations under the License. +// +// The Original Code is Fraunhofer FOKUS code. +// +// The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. +// (registered association), Hansastraße 27 c, 80686 Munich, Germany. +// All Rights Reserved. +// +// Contributor(s): +// Stefan Bund /** \file \brief ConfigFile unit tests */ @@ -35,13 +40,13 @@ #include #define prefix_ -///////////////////////////////cc.p//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// namespace { int var1 (0); bool var2 (false); - + void fun1(int v) { var1 = v; } void fun2() { var2 = true; } @@ -50,7 +55,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_; } @@ -59,17 +64,28 @@ namespace { std::string name_; std::ofstream file_; }; - + } +#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",fty::Command(&fun1)); @@ -93,9 +109,17 @@ SENF_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); + } + } } SENF_AUTO_UNIT_TEST(configFileRestrict) @@ -106,11 +130,11 @@ SENF_AUTO_UNIT_TEST(configFileRestrict) cfgf << "dir1/fun1 10;\n" << "dir2/fun2;\n" << TempFile::close; - + senf::console::ScopedDirectory<> dir1; senf::console::root().add("dir1", dir1); dir1.add("fun1",fty::Command(&fun1)); - + { var1 = 0; var2 = false; @@ -142,15 +166,15 @@ SENF_AUTO_UNIT_TEST(configFileSkipGroup) 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",fty::Command(&fun1)); - + senf::console::ScopedDirectory<> dir2; senf::console::root().add("dir2", dir2); - - dir2.mkdir("dir3").add("fun2", fty::Command(&fun2)); + + dir2.add("dir3",fty::Directory()).add("fun2", fty::Command(&fun2)); dir2.add("fun1", fty::Command(&fun1)); { @@ -185,20 +209,20 @@ SENF_AUTO_UNIT_TEST(configRestrictAndLink) 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",fty::Command(&fun1)); - + senf::console::ScopedDirectory<> dir2; dir1.add("dir2", dir2); - - dir2.mkdir("dir3").add("fun2", fty::Command(&fun2)); + + 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); @@ -213,7 +237,7 @@ SENF_AUTO_UNIT_TEST(configRestrictAndLink) } } -///////////////////////////////cc.e//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_