diff options
| author | randomdan <randomdan@localhost> | 2014-11-04 20:42:34 +0000 | 
|---|---|---|
| committer | randomdan <randomdan@localhost> | 2014-11-04 20:42:34 +0000 | 
| commit | 65bb386107c535d639e5aa9de60d7cc6fbbdd39f (patch) | |
| tree | 0ce1167fcbc52e7668d0bbc49879a7818ecb69be | |
| parent | Switch to external jsonpp library (diff) | |
| download | project2-65bb386107c535d639e5aa9de60d7cc6fbbdd39f.tar.bz2 project2-65bb386107c535d639e5aa9de60d7cc6fbbdd39f.tar.xz project2-65bb386107c535d639e5aa9de60d7cc6fbbdd39f.zip  | |
Add beginnings of UT toolkit and a few tiny UTs over the ice client/compiler
| -rw-r--r-- | project2/common/optionsSource.cpp | 12 | ||||
| -rw-r--r-- | project2/common/optionsSource.h | 5 | ||||
| -rw-r--r-- | project2/common/plugable.cpp | 8 | ||||
| -rw-r--r-- | project2/common/plugable.h | 2 | ||||
| -rw-r--r-- | project2/daemon/p2daemonAppEngine.cpp | 2 | ||||
| -rw-r--r-- | project2/ice/Jamfile.jam | 24 | ||||
| -rw-r--r-- | project2/ice/test.ice | 9 | ||||
| -rw-r--r-- | project2/ice/testClient.cpp | 32 | ||||
| -rw-r--r-- | project2/ut/Jamfile.jam | 12 | ||||
| -rw-r--r-- | project2/ut/testOptionsSource.cpp | 30 | ||||
| -rw-r--r-- | project2/ut/testOptionsSource.h | 22 | 
11 files changed, 155 insertions, 3 deletions
diff --git a/project2/common/optionsSource.cpp b/project2/common/optionsSource.cpp index 58c9b1f..85aebb1 100644 --- a/project2/common/optionsSource.cpp +++ b/project2/common/optionsSource.cpp @@ -43,5 +43,17 @@ OptionsSource::loadSources(const Options::CurrentPlatform & platform)  	}  } +void +OptionsSource::loadSource(const Options::CurrentPlatform & platform, OptionsSourcePtr opts) +{ +		InstanceSet<Options>::OnAll(boost::bind(&Options::reset, _1)); + +		DefaultConfigConsumer dcc; +		opts->loadInto(dcc, platform); +		Plugable::onAllComponents(boost::bind(&ComponentLoader::onConfigLoad, _1)); +		 +		Logger()->message(LOG_DEBUG, "Loaded configuration"); +} +  INSTANTIATESTORE(std::string, OptionsSource); diff --git a/project2/common/optionsSource.h b/project2/common/optionsSource.h index 97a3566..6cfbce9 100644 --- a/project2/common/optionsSource.h +++ b/project2/common/optionsSource.h @@ -13,6 +13,9 @@ class ConfigConsumer {  		virtual const Options::Option * get(const Glib::ustring & name) const = 0;  }; +class OptionsSource; +typedef boost::shared_ptr<OptionsSource> OptionsSourcePtr; +  /// Base class of things that load options  class OptionsSource {  	public: @@ -20,8 +23,8 @@ class OptionsSource {  		virtual bool needReload() const = 0;  		static void loadSources(const Options::CurrentPlatform & platform); +		static void loadSource(const Options::CurrentPlatform & platform, OptionsSourcePtr opts);  }; -typedef boost::intrusive_ptr<OptionsSource> OptionsSourcePtr;  typedef PluginsSameBase<OptionsSource, std::string> OptionsSources;  #define DECLARE_OPTIONSSOURCE(Id, Inst) \ diff --git a/project2/common/plugable.cpp b/project2/common/plugable.cpp new file mode 100644 index 0000000..83d0cc5 --- /dev/null +++ b/project2/common/plugable.cpp @@ -0,0 +1,8 @@ +#include "plugable.h" + +void +Plugable::onAllComponents(const boost::function<void(ComponentLoader *)> & func, bool coe) +{ +	InstanceSet<ComponentLoader>::OnAll(func, coe); +} + diff --git a/project2/common/plugable.h b/project2/common/plugable.h index af7f91f..ce3439a 100644 --- a/project2/common/plugable.h +++ b/project2/common/plugable.h @@ -10,7 +10,7 @@ class ComponentLoader;  class Plugable : public InstanceSet<ComponentLoader> {  	public: -		static void onAllComponents(const boost::function<void(ComponentLoader *)> & func) { InstanceSet<ComponentLoader>::OnAll(func, true); } +		static void onAllComponents(const boost::function<void(ComponentLoader *)> & func, bool coe = false);  };  /// All loaders, keyed by string, enum, int, etc diff --git a/project2/daemon/p2daemonAppEngine.cpp b/project2/daemon/p2daemonAppEngine.cpp index b48b75b..7a1c602 100644 --- a/project2/daemon/p2daemonAppEngine.cpp +++ b/project2/daemon/p2daemonAppEngine.cpp @@ -120,7 +120,7 @@ bool  DaemonAppEngine::periodicCallback()  {  	Logger()->messagebf(LOG_DEBUG, "%s: firing component periodics.", __PRETTY_FUNCTION__); -	Plugable::onAllComponents(boost::bind(&ComponentLoader::onPeriodic, _1)); +	Plugable::onAllComponents(boost::bind(&ComponentLoader::onPeriodic, _1), true);  	return true;  } diff --git a/project2/ice/Jamfile.jam b/project2/ice/Jamfile.jam index 1376c34..d6cf16f 100644 --- a/project2/ice/Jamfile.jam +++ b/project2/ice/Jamfile.jam @@ -1,3 +1,5 @@ +import testing ; +  alias glibmm : : : :  	<cflags>"`pkg-config --cflags glibmm-2.4`"  	<linkflags>"`pkg-config --libs glibmm-2.4`" @@ -33,6 +35,7 @@ lib p2iceclient :  	<library>pthread  	: :  	<library>p2ice +	<library>../common//p2common  	;  lib p2icedaemon : @@ -68,3 +71,24 @@ lib p2ice :  	<library>IceUtil  	<library>boost_filesystem  	; + +lib test : +	test.ice +	: +	<library>Ice +	<library>IceUtil +	<library>pthread +	; + +unit-test testClient : +	[ glob testClient.cpp ] +	: +	<dependency>test.ice +	<library>p2iceclient +	<library>../ut//p2ut +	<library>../basics//p2basics +	<library>Ice +	<library>IceUtil +	<library>boost_filesystem +	; + diff --git a/project2/ice/test.ice b/project2/ice/test.ice new file mode 100644 index 0000000..3c18999 --- /dev/null +++ b/project2/ice/test.ice @@ -0,0 +1,9 @@ +module test { +	interface a +	{ +		["project2:task"] +		void someTask(); + +	}; +}; + diff --git a/project2/ice/testClient.cpp b/project2/ice/testClient.cpp new file mode 100644 index 0000000..d7256ae --- /dev/null +++ b/project2/ice/testClient.cpp @@ -0,0 +1,32 @@ +#define BOOST_TEST_MODULE Client +#include <boost/test/unit_test.hpp> +#include <boost/filesystem/operations.hpp> +#include "iceClient.h" +#include <testOptionsSource.h> + +const auto self = boost::filesystem::canonical("/proc/self/exe"); +const Glib::ustring testPlatform; + +BOOST_AUTO_TEST_CASE( compile_client_full ) +{ +	const std::string tmpdir = "/tmp/ut/project2.slice/full"; +	boost::filesystem::remove_all(tmpdir); + +	TestOptionsSource::LoadTestOptions({ +			{ "ice.compile.tmpdir", tmpdir }, +			{ "ice.client.slice", "test.ice" } +		}); +} + +BOOST_AUTO_TEST_CASE( compile_client_clientOnly ) +{ +	const std::string tmpdir = "/tmp/ut/project2.slice/clientOnly"; +	boost::filesystem::remove_all(tmpdir); + +	TestOptionsSource::LoadTestOptions({ +			{ "library", (self.parent_path() / "libtest.so").string() }, +			{ "ice.compile.tmpdir", tmpdir }, +			{ "ice.client.sliceclient", "test.ice" } +		}); +} + diff --git a/project2/ut/Jamfile.jam b/project2/ut/Jamfile.jam new file mode 100644 index 0000000..0c7aa08 --- /dev/null +++ b/project2/ut/Jamfile.jam @@ -0,0 +1,12 @@ +lib boost_utf : : <name>boost_unit_test_framework ; + +lib p2ut : +	[ glob *.cpp ] +	: +	<library>../common//p2common +	: : +	<define>BOOST_TEST_DYN_LINK +	<library>boost_utf +	<include>. +	; + diff --git a/project2/ut/testOptionsSource.cpp b/project2/ut/testOptionsSource.cpp new file mode 100644 index 0000000..59dc882 --- /dev/null +++ b/project2/ut/testOptionsSource.cpp @@ -0,0 +1,30 @@ +#include "testOptionsSource.h" + +const Glib::ustring testPlatform; + +TestOptionsSource::TestOptionsSource(const Opts & o) : +	opts(o) +{ +} + +void +TestOptionsSource::loadInto(const ConfigConsumer & consume, const Options::CurrentPlatform & platform) const +{ +	BOOST_FOREACH(const auto & opt, opts) { +		consume(opt.first, testPlatform, opt.second, platform); +	} +} + +bool +TestOptionsSource::needReload() const +{ +	return true; +} + +void +TestOptionsSource::LoadTestOptions(const Opts & o) +{ +	OptionsSource::loadSource(boost::bind<const Glib::ustring &>([]{ return testPlatform; }), +			OptionsSourcePtr(new TestOptionsSource(o)));	 +} + diff --git a/project2/ut/testOptionsSource.h b/project2/ut/testOptionsSource.h new file mode 100644 index 0000000..9bc2101 --- /dev/null +++ b/project2/ut/testOptionsSource.h @@ -0,0 +1,22 @@ +#ifndef P2_TEST_OPTIONSSOURCE_H +#define P2_TEST_OPTIONSSOURCE_H + +#include <optionsSource.h> + +class TestOptionsSource : public OptionsSource { +	public: +		typedef std::list<std::pair<std::string, std::string>> Opts; + +		void loadInto(const ConfigConsumer & consume, const Options::CurrentPlatform & platform) const override; +		bool needReload() const override; + +		static void LoadTestOptions(const Opts & o); + +	private: +		TestOptionsSource(const Opts & o); +	 +		const Opts opts; +}; + +#endif +  | 
