summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2013-07-29 17:22:07 +0200
committerJose <jose@zeroc.com>2013-07-29 17:22:07 +0200
commit2f37792f3f90692b2aa5ec9cc3383c9e02f66c9c (patch)
treee2968ac4239e7e8182d4cc6fb2f458c95fbb384e /cpp
parentremoving INSTALL files (diff)
downloadice-2f37792f3f90692b2aa5ec9cc3383c9e02f66c9c.tar.bz2
ice-2f37792f3f90692b2aa5ec9cc3383c9e02f66c9c.tar.xz
ice-2f37792f3f90692b2aa5ec9cc3383c9e02f66c9c.zip
Fixed ICE-5393 - Java / C# load properties doesn't correctly parse Ice.Config with multiple files
Diffstat (limited to 'cpp')
-rw-r--r--cpp/src/Ice/PropertiesI.cpp20
-rw-r--r--cpp/test/Ice/properties/Client.cpp39
-rw-r--r--cpp/test/Ice/properties/config/config.11
-rw-r--r--cpp/test/Ice/properties/config/config.21
-rw-r--r--cpp/test/Ice/properties/config/config.31
5 files changed, 38 insertions, 24 deletions
diff --git a/cpp/src/Ice/PropertiesI.cpp b/cpp/src/Ice/PropertiesI.cpp
index c22a2572042..cfec754baf9 100644
--- a/cpp/src/Ice/PropertiesI.cpp
+++ b/cpp/src/Ice/PropertiesI.cpp
@@ -748,23 +748,11 @@ Ice::PropertiesI::loadConfig()
if(!value.empty())
{
- const string delim = " \t\r\n";
- string::size_type beg = value.find_first_not_of(delim);
- while(beg != string::npos)
+ vector<string> files;
+ IceUtilInternal::splitString(value, ",", files);
+ for(vector<string>::const_iterator i = files.begin(); i != files.end(); ++i)
{
- string::size_type end = value.find(",", beg);
- string file;
- if(end == string::npos)
- {
- file = value.substr(beg);
- beg = end;
- }
- else
- {
- file = value.substr(beg, end - beg);
- beg = value.find_first_not_of("," + delim, end);
- }
- load(file);
+ load(IceUtilInternal::trim(*i));
}
}
diff --git a/cpp/test/Ice/properties/Client.cpp b/cpp/test/Ice/properties/Client.cpp
index 198896e015e..b17403fe9be 100644
--- a/cpp/test/Ice/properties/Client.cpp
+++ b/cpp/test/Ice/properties/Client.cpp
@@ -10,6 +10,7 @@
#include <Ice/Ice.h>
#include <TestCommon.h>
#include <IceUtil/FileUtil.h>
+#include <IceUtil/ArgVector.h>
using namespace std;
@@ -52,13 +53,12 @@ main(int argc, char* argv[])
try
{
cout << "testing load properties from UTF-8 path... " << flush;
- Ice::InitializationData id;
- id.properties = Ice::createProperties();
- id.properties->load(configPath);
- test(id.properties->getProperty("Ice.Trace.Network") == "1");
- test(id.properties->getProperty("Ice.Trace.Protocol") == "1");
- test(id.properties->getProperty("Config.Path") == configPath);
- test(id.properties->getProperty("Ice.ProgramName") == "PropertiesClient");
+ Ice::PropertiesPtr properties = Ice::createProperties();
+ properties->load(configPath);
+ test(properties->getProperty("Ice.Trace.Network") == "1");
+ test(properties->getProperty("Ice.Trace.Protocol") == "1");
+ test(properties->getProperty("Config.Path") == configPath);
+ test(properties->getProperty("Ice.ProgramName") == "PropertiesClient");
cout << "ok" << endl;
}
catch(const Ice::Exception& ex)
@@ -66,9 +66,32 @@ main(int argc, char* argv[])
cerr << ex << endl;
return EXIT_FAILURE;
}
+
cout << "testing load properties from UTF-8 path using Ice::Application... " << flush;
Client c;
c.main(argc, argv, configPath.c_str());
cout << "ok" << endl;
+
+ try
+ {
+ //
+ // Try to load multiple config files.
+ //
+ cout << "testing using Ice.Config with multiple config files... " << flush;
+ Ice::PropertiesPtr properties;
+ Ice::StringSeq args;
+ args.push_back("--Ice.Config=config/config.1, config/config.2, config/config.3");
+ IceUtilInternal::ArgVector a(args);
+ properties = Ice::createProperties(a.argc, a.argv);
+ test(properties->getProperty("Config1") == "Config1");
+ test(properties->getProperty("Config2") == "Config2");
+ test(properties->getProperty("Config3") == "Config3");
+ cout << "ok" << endl;
+ }
+ catch(const Ice::Exception& ex)
+ {
+ cerr << ex << endl;
+ return EXIT_FAILURE;
+ }
return EXIT_SUCCESS;
-} \ No newline at end of file
+}
diff --git a/cpp/test/Ice/properties/config/config.1 b/cpp/test/Ice/properties/config/config.1
new file mode 100644
index 00000000000..2a20653e4c5
--- /dev/null
+++ b/cpp/test/Ice/properties/config/config.1
@@ -0,0 +1 @@
+Config1=Config1 \ No newline at end of file
diff --git a/cpp/test/Ice/properties/config/config.2 b/cpp/test/Ice/properties/config/config.2
new file mode 100644
index 00000000000..be276df6602
--- /dev/null
+++ b/cpp/test/Ice/properties/config/config.2
@@ -0,0 +1 @@
+Config2=Config2 \ No newline at end of file
diff --git a/cpp/test/Ice/properties/config/config.3 b/cpp/test/Ice/properties/config/config.3
new file mode 100644
index 00000000000..55c1e1123f6
--- /dev/null
+++ b/cpp/test/Ice/properties/config/config.3
@@ -0,0 +1 @@
+Config3=Config3 \ No newline at end of file