diff options
| author | Dan Goodliffe <dan@randomdan.homeip.net> | 2015-02-16 20:51:59 +0000 | 
|---|---|---|
| committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2015-05-06 00:40:49 +0100 | 
| commit | b6aaaf3bc4e74988fa491e5dd52522ec4431a275 (patch) | |
| tree | 952c69a6ea008b0c7c741dbc73e3394c3ab888c3 | |
| parent | Actually use precompiled headers (diff) | |
| download | netfs-b6aaaf3bc4e74988fa491e5dd52522ec4431a275.tar.bz2 netfs-b6aaaf3bc4e74988fa491e5dd52522ec4431a275.tar.xz netfs-b6aaaf3bc4e74988fa491e5dd52522ec4431a275.zip | |
Program defined config files and sandbox
| -rw-r--r-- | netfs/daemon/daemon.cpp | 8 | ||||
| -rw-r--r-- | netfs/daemon/daemon.h | 3 | ||||
| -rw-r--r-- | netfs/fuse/fuseApp.cpp | 8 | ||||
| -rw-r--r-- | netfs/fuse/fuseApp.h | 3 | ||||
| -rw-r--r-- | netfs/unittests/Jamfile.jam | 2 | ||||
| -rw-r--r-- | netfs/unittests/client.xml | 14 | ||||
| -rw-r--r-- | netfs/unittests/daemon.xml | 19 | ||||
| -rw-r--r-- | netfs/unittests/testCore.cpp | 49 | 
8 files changed, 62 insertions, 44 deletions
| diff --git a/netfs/daemon/daemon.cpp b/netfs/daemon/daemon.cpp index 0b7b64f..cf312bb 100644 --- a/netfs/daemon/daemon.cpp +++ b/netfs/daemon/daemon.cpp @@ -38,11 +38,17 @@ NetFSDaemon::start(const std::string & name, const Ice::CommunicatorPtr &, const  	adapter->activate();  } +NetFS::Daemon::ConfigurationPtr +NetFSDaemon::ReadConfiguration(const boost::filesystem::path & path) const +{ +	return Slicer::Deserialize<Slicer::XmlFileDeserializer, NetFS::Daemon::Configuration>(path); +} +  void  NetFSDaemon::LoadConfiguration(const boost::filesystem::path & path)  {  	dc = new NetFS::Daemon::RuntimeConfiguration(); -	dc->CurrentConfiguration = Slicer::Deserialize<Slicer::XmlFileDeserializer, NetFS::Daemon::Configuration>(path); +	dc->CurrentConfiguration = ReadConfiguration(path);  	auto selfItr = dc->CurrentConfiguration->Hosts.find(hostname());  	if (selfItr == dc->CurrentConfiguration->Hosts.end()) {  		throw std::runtime_error("This host is not defined in the configuration."); diff --git a/netfs/daemon/daemon.h b/netfs/daemon/daemon.h index a43d7cd..8cf4d4a 100644 --- a/netfs/daemon/daemon.h +++ b/netfs/daemon/daemon.h @@ -14,6 +14,9 @@ class NetFSDaemon : public IceBox::Service {  		virtual void start(const std::string&, const Ice::CommunicatorPtr&, const Ice::StringSeq&) override;  		virtual void stop() override; +	protected: +		virtual NetFS::Daemon::ConfigurationPtr ReadConfiguration(const boost::filesystem::path & path) const; +  	private:  		void LoadConfiguration(const boost::filesystem::path & path); diff --git a/netfs/fuse/fuseApp.cpp b/netfs/fuse/fuseApp.cpp index 2f3b288..d579271 100644 --- a/netfs/fuse/fuseApp.cpp +++ b/netfs/fuse/fuseApp.cpp @@ -34,11 +34,17 @@ NetFS::FuseApp::~FuseApp()  	}  } +NetFS::Client::ConfigurationPtr +NetFS::FuseApp::ReadConfiguration(const std::string & path) const +{ +	return Slicer::Deserialize<Slicer::XmlFileDeserializer, NetFS::Client::Configuration>(path); +} +  void *  NetFS::FuseApp::init(struct fuse_conn_info *)  {  	ic = Ice::initialize(_argc, _argv); -	fc = Slicer::Deserialize<Slicer::XmlFileDeserializer, NetFS::Client::Configuration>(configPath); +	fc = ReadConfiguration(configPath);  	return NULL;  } diff --git a/netfs/fuse/fuseApp.h b/netfs/fuse/fuseApp.h index 4786591..e514b55 100644 --- a/netfs/fuse/fuseApp.h +++ b/netfs/fuse/fuseApp.h @@ -80,6 +80,9 @@ namespace NetFS {  			virtual struct fuse_context * fuse_get_context() = 0; +		protected: +			virtual NetFS::Client::ConfigurationPtr ReadConfiguration(const std::string &) const; +  		private:  			void setProxy(OpenFilePtr, uint64_t & fh);  			OpenFilePtr getFileProxy(uint64_t localID) const; diff --git a/netfs/unittests/Jamfile.jam b/netfs/unittests/Jamfile.jam index 1c16bc7..af02411 100644 --- a/netfs/unittests/Jamfile.jam +++ b/netfs/unittests/Jamfile.jam @@ -11,8 +11,6 @@ path-constant me : . ;  run  	testCore.cpp  	: : -	client.xml -	daemon.xml  	:  	<define>BOOST_TEST_DYN_LINK  	<library>IceUtil diff --git a/netfs/unittests/client.xml b/netfs/unittests/client.xml deleted file mode 100644 index c159a24..0000000 --- a/netfs/unittests/client.xml +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0"?> -<config> -  <resources> -    <resource> -      <name>testvol</name> -      <resource> -        <export>unittest</export> -				<endpoints> -					<endpoint>tcp -h localhost -p 4000</endpoint> -				</endpoints> -      </resource> -    </resource> -  </resources> -</config> diff --git a/netfs/unittests/daemon.xml b/netfs/unittests/daemon.xml deleted file mode 100644 index 8bf58a9..0000000 --- a/netfs/unittests/daemon.xml +++ /dev/null @@ -1,19 +0,0 @@ -<?xml version="1.0"?> -<config> -  <hosts> -    <host> -      <hostname>unittest</hostname> -      <host> -        <endpoint>tcp -p 4000:udp -p 10000</endpoint> -      </host> -    </host> -  </hosts> -  <exports> -    <export> -      <name>unittest</name> -      <export> -        <root>/usr/portage</root> -      </export> -    </export> -  </exports> -</config> diff --git a/netfs/unittests/testCore.cpp b/netfs/unittests/testCore.cpp index b9a1836..2262444 100644 --- a/netfs/unittests/testCore.cpp +++ b/netfs/unittests/testCore.cpp @@ -4,7 +4,6 @@  #include <Ice/ObjectAdapter.h>  #include <Ice/Service.h>  #include <daemon.h> -#include <service.h>  #include <fuseApp.h>  #include <boost/filesystem/path.hpp> @@ -15,6 +14,26 @@  #define XSTR(s) STR(s)  #define STR(s) #s  const boost::filesystem::path RootDir(XSTR(ROOT)); +const boost::filesystem::path TestExportRoot(RootDir / "testExport"); + +std::string testEndpoint("tcp -h localhost -p 12012"); + +class MockDaemon : public NetFSDaemon { +	public: +		MockDaemon(const Ice::CommunicatorPtr & ic) : NetFSDaemon(ic) { } + +	protected: +		virtual NetFS::Daemon::ConfigurationPtr ReadConfiguration(const boost::filesystem::path &) const override +		{ +			return new NetFS::Daemon::Configuration( +				{ +					{ "testvol", new NetFS::Daemon::Export(TestExportRoot.string()) } +				}, +				{ +					{ "unittest", new NetFS::Daemon::Host(testEndpoint) } +				}); +		} +};  class FuseMock : public NetFS::FuseApp {  	public: @@ -36,12 +55,22 @@ class FuseMock : public NetFS::FuseApp {  			}  			return 0;  		} + +	protected: +		virtual NetFS::Client::ConfigurationPtr ReadConfiguration(const std::string &) const override +		{ +			return new NetFS::Client::Configuration( +				{ +					{ "testvol", new NetFS::Client::Resource("testvol", "Service", { testEndpoint }) } +				}); +		} +  	private:  		fuse_context context;  };  char * argv[] = { -	strdup((RootDir / "client.xml:testvol").string().c_str()), +	strdup((RootDir / ":testvol").string().c_str()),  	strdup((RootDir / "test").string().c_str())  }; @@ -50,13 +79,12 @@ class Core {  		Core() :  			params({}),  			ic(Ice::initialize(params)), -			daemon(ic), +			daemon(new MockDaemon(ic)),  			argc(2),  			fuse(new FuseMock(argc, argv))  		{ -			ic->getProperties()->setProperty("NetFSD.ConfigPath", (RootDir / "daemon.xml").string());  			ic->getProperties()->setProperty("NetFSD.HostNameOverride", "unittest"); -			daemon.start("NetFSDaemonAdapter", ic, {}); +			daemon->start("NetFSDaemonAdapter", ic, {});  			char ** a = argv;  			fuse->runint(argc, a);  			fuse->init(NULL); @@ -65,19 +93,26 @@ class Core {  		~Core()  		{  			delete fuse; +			delete daemon;  			ic->destroy();  		}  	protected:  		Ice::StringSeq params;  		Ice::CommunicatorPtr ic; -		NetFSDaemon daemon; +		NetFSDaemon * daemon;  		int argc;  		FuseAppBase * fuse;  };  BOOST_FIXTURE_TEST_SUITE( NetfsCore, Core ) +BOOST_AUTO_TEST_CASE ( initializeSandbox ) +{ +	boost::filesystem::remove_all(TestExportRoot); +	boost::filesystem::create_directories(TestExportRoot); +} +  BOOST_AUTO_TEST_CASE ( daemonInitialised )  {  	auto service = NetFS::ServicePrx::checkedCast(ic->stringToProxy("Service")); @@ -88,7 +123,7 @@ BOOST_AUTO_TEST_CASE ( daemonInitialised )  BOOST_AUTO_TEST_CASE ( clientInitialised )  {  	struct statvfs s; -	fuse->statfs("/",  &s); +	BOOST_REQUIRE_EQUAL(0, fuse->statfs("/",  &s));  }  BOOST_AUTO_TEST_SUITE_END(); | 
