ConfigSvc/test/config-svc-test.cpp

Go to the documentation of this file.
00001 //--------------------------------------------------------------------------
00002 // File and Version Information:
00003 //      $Id: config-svc-test.cpp 5425 2013-02-13 00:50:31Z salnikov@SLAC.STANFORD.EDU $
00004 //
00005 // Description:
00006 //      Test suite case for the config-svc-test.
00007 //
00008 //------------------------------------------------------------------------
00009 
00010 //---------------
00011 // C++ Headers --
00012 //---------------
00013 #include <iostream>
00014 #include <sstream>
00015 #include <vector>
00016 #include <list>
00017 
00018 //-------------------------------
00019 // Collaborating Class Headers --
00020 //-------------------------------
00021 #include "ConfigSvc/ConfigSvc.h"
00022 #include "ConfigSvc/ConfigSvcImplFile.h"
00023 
00024 #define BOOST_TEST_MODULE configSvcTest
00025 #include <boost/test/included/unit_test.hpp>
00026 
00027 /**
00028  * Simple test suite for module config-svc-test.
00029  * See http://www.boost.org/doc/libs/1_36_0/libs/test/doc/html/index.html
00030  */
00031 
00032 namespace {
00033   
00034 
00035 // example input
00036 const char* config = "\
00037 # comment\n\
00038 [section1]\n\
00039 paramInt1 = 0\n\
00040 paramInt2 = -1000\n\
00041 paramInt3 = 1000\n\
00042 \n\
00043 paramFloat1 = 0.123456\n\
00044 paramFloat2 = 1e10\n\
00045 paramFloat3 = -1e10\n\
00046 paramFloat4 = 1e-10\n\
00047 \n\
00048 paramBool1 = 0\n\
00049 paramBool2 = 1\n\
00050 paramBool3 = no\n\
00051 paramBool4 = yes\n\
00052 paramBool5 = off\n\
00053 paramBool6 = on\n\
00054 paramBool7 = FALSE\n\
00055 paramBool8 = True\n\
00056 \n\
00057 paramString1 = \n\
00058 paramString2 = OneWord \n\
00059 paramString3 = Two Words \n\
00060 \n\
00061 paramList1 = \n\
00062 paramList2 = 1000 \n\
00063 paramList3 = 2000 3000 \n\
00064 ";
00065 
00066 
00067 }
00068 
00069 class TestFixture {
00070 public:
00071   TestFixture() {
00072     std::istringstream stream(config);
00073     // start with reading configuration file
00074     boost::shared_ptr<ConfigSvc::ConfigSvcImplI> cfgImpl ( new ConfigSvc::ConfigSvcImplFile(stream) );
00075     // initialize config service
00076     ConfigSvc::ConfigSvc::init(cfgImpl);
00077   }
00078 };
00079 
00080 BOOST_GLOBAL_FIXTURE( TestFixture );
00081 
00082 // ==============================================================
00083 
00084 BOOST_AUTO_TEST_CASE( test_exceptions )
00085 {
00086   ConfigSvc::ConfigSvc cfgsvc;
00087   
00088   BOOST_CHECK_THROW(cfgsvc.get("unknown_section", "unknown_param"), ConfigSvc::ExceptionMissing);
00089   BOOST_CHECK_THROW(cfgsvc.get("section1", "unknown_param"), ConfigSvc::ExceptionMissing);
00090   BOOST_CHECK_THROW(cfgsvc.getList("unknown_section", "unknown_param"), ConfigSvc::ExceptionMissing);
00091   BOOST_CHECK_THROW(cfgsvc.getList("section1", "unknown_param"), ConfigSvc::ExceptionMissing);
00092 
00093   BOOST_CHECK_NO_THROW(cfgsvc.get("unknown_section", "unknown_param", 0));
00094   BOOST_CHECK_NO_THROW(cfgsvc.get("section1", "unknown_param", 0));
00095   BOOST_CHECK_NO_THROW(cfgsvc.getList("unknown_section", "unknown_param", std::vector<int>()));
00096   BOOST_CHECK_NO_THROW(cfgsvc.getList("section1", "unknown_param", std::list<int>()));
00097 }
00098 
00099 // ==============================================================
00100 
00101 BOOST_AUTO_TEST_CASE( test_int )
00102 {
00103   ConfigSvc::ConfigSvc cfgsvc;
00104 
00105   int val;
00106   
00107   val = cfgsvc.get("section1", "paramInt1");
00108   BOOST_CHECK_EQUAL(val, 0);
00109   val = cfgsvc.get("section1", "paramInt2");
00110   BOOST_CHECK_EQUAL(val, -1000);
00111   val = cfgsvc.get("section1", "paramInt3");
00112   BOOST_CHECK_EQUAL(val, 1000);
00113   val = cfgsvc.get("section1", "paramInt3", -1000000);
00114   BOOST_CHECK_EQUAL(val, 1000);
00115   val = cfgsvc.get("section1", "unknown_param", -1000000);
00116   BOOST_CHECK_EQUAL(val, -1000000);
00117 }
00118 
00119 // ==============================================================
00120 
00121 BOOST_AUTO_TEST_CASE( test_double )
00122 {
00123   ConfigSvc::ConfigSvc cfgsvc;
00124 
00125   double val;
00126   
00127   val = cfgsvc.get("section1", "paramFloat1");
00128   BOOST_CHECK_EQUAL(val, 0.123456);
00129   val = cfgsvc.get("section1", "paramFloat2");
00130   BOOST_CHECK_EQUAL(val, 1e10);
00131   val = cfgsvc.get("section1", "paramFloat3");
00132   BOOST_CHECK_EQUAL(val, -1e10);
00133   val = cfgsvc.get("section1", "paramFloat4");
00134   BOOST_CHECK_EQUAL(val, 1e-10);
00135 }
00136 
00137 // ==============================================================
00138 
00139 BOOST_AUTO_TEST_CASE( test_bool )
00140 {
00141   ConfigSvc::ConfigSvc cfgsvc;
00142 
00143   bool val;
00144   
00145   val = cfgsvc.get("section1", "paramBool1");
00146   BOOST_CHECK_EQUAL(val, false);
00147   val = cfgsvc.get("section1", "paramBool2");
00148   BOOST_CHECK_EQUAL(val, true);
00149   val = cfgsvc.get("section1", "paramBool3");
00150   BOOST_CHECK_EQUAL(val, false);
00151   val = cfgsvc.get("section1", "paramBool4");
00152   BOOST_CHECK_EQUAL(val, true);
00153   val = cfgsvc.get("section1", "paramBool5");
00154   BOOST_CHECK_EQUAL(val, false);
00155   val = cfgsvc.get("section1", "paramBool6");
00156   BOOST_CHECK_EQUAL(val, true);
00157   val = cfgsvc.get("section1", "paramBool7");
00158   BOOST_CHECK_EQUAL(val, false);
00159   val = cfgsvc.get("section1", "paramBool8");
00160   BOOST_CHECK_EQUAL(val, true);
00161   val = cfgsvc.get("section1", "paramBool8", false);
00162   BOOST_CHECK_EQUAL(val, true);
00163   val = cfgsvc.get("section1", "unknown_param", false);
00164   BOOST_CHECK_EQUAL(val, false);
00165 }
00166 
00167 // ==============================================================
00168 
00169 BOOST_AUTO_TEST_CASE( test_str )
00170 {
00171   ConfigSvc::ConfigSvc cfgsvc;
00172 
00173   std::string val;
00174   val = cfgsvc.getStr("section1", "paramString1");
00175   BOOST_CHECK_EQUAL(val, "");
00176   val = cfgsvc.getStr("section1", "paramString2");
00177   BOOST_CHECK_EQUAL(val, "OneWord");
00178   val = cfgsvc.getStr("section1", "paramString3");
00179   BOOST_CHECK_EQUAL(val, "Two Words");
00180 }
00181 
00182 // ==============================================================
00183 
00184 BOOST_AUTO_TEST_CASE( test_charp )
00185 {
00186   ConfigSvc::ConfigSvc cfgsvc;
00187 
00188   const char* val;
00189   val = cfgsvc.get("section1", "paramString1");
00190   BOOST_CHECK_EQUAL(val, std::string(""));
00191   val = cfgsvc.get("section1", "paramString2");
00192   BOOST_CHECK_EQUAL(val, std::string("OneWord"));
00193   val = cfgsvc.get("section1", "paramString3");
00194   BOOST_CHECK_EQUAL(val, std::string("Two Words"));
00195 }
00196 
00197 // ==============================================================
00198 
00199 BOOST_AUTO_TEST_CASE( test_list_str )
00200 {
00201   ConfigSvc::ConfigSvc cfgsvc;
00202 
00203   std::vector<std::string> val;
00204   val = cfgsvc.getList("section1", "paramList1");
00205   BOOST_CHECK(val.empty());
00206   val = cfgsvc.getList("section1", "paramList2");
00207   BOOST_CHECK_EQUAL(val.size(), 1U);
00208   BOOST_CHECK_EQUAL(val[0], "1000");
00209   val = cfgsvc.getList("section1", "paramList3");
00210   BOOST_CHECK_EQUAL(val.size(), 2U);
00211   BOOST_CHECK_EQUAL(val[0], "2000");
00212   BOOST_CHECK_EQUAL(val[1], "3000");
00213 }
00214 
00215 // ==============================================================
00216 
00217 BOOST_AUTO_TEST_CASE( test_list_int )
00218 {
00219   ConfigSvc::ConfigSvc cfgsvc;
00220 
00221   std::vector<int> val;
00222   val = cfgsvc.getList("section1", "paramList1");
00223   BOOST_CHECK(val.empty());
00224   val = cfgsvc.getList("section1", "paramList2");
00225   BOOST_CHECK_EQUAL(val.size(), 1U);
00226   BOOST_CHECK_EQUAL(val[0], 1000);
00227   val = cfgsvc.getList("section1", "paramList3");
00228   BOOST_CHECK_EQUAL(val.size(), 2U);
00229   BOOST_CHECK_EQUAL(val[0], 2000);
00230   BOOST_CHECK_EQUAL(val[1], 3000);
00231 }
00232 

Generated on 19 Dec 2016 for PSDMSoftware by  doxygen 1.4.7