summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp')
-rw-r--r--cpp/config/TestUtil.py23
-rw-r--r--cpp/demo/Freeze/phonebook/Scanner.l160
-rw-r--r--cpp/src/Ice/ThreadPool.cpp4
-rw-r--r--cpp/src/IcePack/Activator.cpp26
-rw-r--r--cpp/src/IcePack/Scanner.l122
-rwxr-xr-xcpp/test/Ice/faultTolerance/run.py10
-rwxr-xr-xcpp/test/Ice/locationForward/run.py20
-rw-r--r--cpp/test/Ice/operations/Twoways.cpp3
-rw-r--r--cpp/test/IcePack/simple/AllTests.cpp3
-rwxr-xr-xcpp/test/IcePack/simple/run.py31
10 files changed, 215 insertions, 187 deletions
diff --git a/cpp/config/TestUtil.py b/cpp/config/TestUtil.py
index eeeeb09d00b..8b9d0cbf652 100644
--- a/cpp/config/TestUtil.py
+++ b/cpp/config/TestUtil.py
@@ -12,9 +12,13 @@
import sys, os
protocol = "tcp"
-serverOptions = " --Ice.Protocol=" + protocol + " --Ice.Trace.Security=0 --Ice.PrintProcessId --Ice.PrintAdapterReady --Ice.ServerIdleTime=60 --Ice.Ssl.Config=TOPLEVELDIR/Certs/server_sslconfig.xml"
-clientOptions = " --Ice.Protocol=" + protocol + " --Ice.Trace.Security=0 --Ice.Ssl.Config=TOPLEVELDIR/Certs/client_sslconfig.xml"
-collocatedOptions = " --Ice.Protocol=" + protocol + " --Ice.Trace.Security=0 --Ice.PrintProcessId --Ice.PrintAdapterReady --Ice.ServerIdleTime=60 --Ice.Ssl.Config=TOPLEVELDIR/Certs/sslconfig.xml"
+
+serverOptions = " --Ice.PrintProcessId --Ice.PrintAdapterReady --Ice.ServerIdleTime=60" + \
+ " --Ice.Ssl.Config=TOPLEVELDIR/Certs/server_sslconfig.xml --Ice.Protocol=" + protocol
+
+clientOptions = " --Ice.Ssl.Config=TOPLEVELDIR/Certs/client_sslconfig.xml --Ice.Protocol=" + protocol
+
+collocatedOptions = " --Ice.Ssl.Config=TOPLEVELDIR/Certs/sslconfig.xml --Ice.Protocol=" + protocol
serverPids = []
@@ -59,16 +63,14 @@ def clientServerTest(toplevel, name):
server = os.path.normpath(testdir + "/server")
client = os.path.normpath(testdir + "/client")
- updatedServerOptions = serverOptions
- updatedServerOptions = updatedServerOptions.replace("TOPLEVELDIR", toplevel)
+ updatedServerOptions = serverOptions.replace("TOPLEVELDIR", toplevel)
print "starting server...",
serverPipe = os.popen(server + updatedServerOptions)
getServerPid(serverPipe)
getAdapterReady(serverPipe)
print "ok"
- updatedClientOptions = clientOptions
- updatedClientOptions = updatedClientOptions.replace("TOPLEVELDIR", toplevel)
+ updatedClientOptions = clientOptions.replace("TOPLEVELDIR", toplevel)
print "starting client...",
clientPipe = os.popen(client + updatedClientOptions)
output = clientPipe.readline()
@@ -89,12 +91,9 @@ def collocatedTest(toplevel, name):
testdir = os.path.normpath(toplevel + "/test/" + name)
collocated = os.path.normpath(testdir + "/collocated")
- updatedCollocatedOptions = collocatedOptions
- updatedCollocatedOptions = updatedCollocatedOptions.replace("TOPLEVELDIR", toplevel)
-
- command = collocated + " " + updatedCollocatedOptions
+ updatedCollocatedOptions = collocatedOptions.replace("TOPLEVELDIR", toplevel)
print "starting collocated...",
- collocatedPipe = os.popen(command)
+ collocatedPipe = os.popen(collocated + updatedCollocatedOptions)
output = collocatedPipe.read().strip()
if not output:
print "failed!"
diff --git a/cpp/demo/Freeze/phonebook/Scanner.l b/cpp/demo/Freeze/phonebook/Scanner.l
index 141ee0193e3..4607d2a5a95 100644
--- a/cpp/demo/Freeze/phonebook/Scanner.l
+++ b/cpp/demo/Freeze/phonebook/Scanner.l
@@ -21,8 +21,8 @@ using namespace Ice;
%}
-WS [ \t\v\f]
-NL [\n\r]
+WS [ \t\v\f\r]
+NL [\n]
%option noyywrap
@@ -71,8 +71,83 @@ NL [\n\r]
}
}
+"help" {
+ return TOK_HELP;
+}
+
+"quit"|"exit" {
+ return TOK_EXIT;
+}
+
+"add" {
+ return TOK_ADD_CONTACTS;
+}
+
+"find" {
+ return TOK_FIND_CONTACTS;
+}
+
+"next" {
+ return TOK_NEXT_FOUND_CONTACT;
+}
+
+"current" {
+ return TOK_PRINT_CURRENT;
+}
+
+"name" {
+ return TOK_SET_CURRENT_NAME;
+}
+
+"address" {
+ return TOK_SET_CURRENT_ADDRESS;
+}
+
+"phone" {
+ return TOK_SET_CURRENT_PHONE;
+}
+
+"remove" {
+ return TOK_REMOVE_CURRENT;
+}
+
+"size" {
+ return TOK_SET_EVICTOR_SIZE;
+}
+
+"shutdown" {
+ return TOK_SHUTDOWN;
+}
+
+{WS}*(\\{WS}*{NL})? {
+ int len = strlen(yytext);
+ for (int i = 0; i < len; ++i)
+ {
+ if (yytext[i] == '\\')
+ {
+ parser->continueLine();
+ }
+ else if (yytext[i] == '\n')
+ {
+ parser->nextLine();
+ }
+ }
+}
+
+{NL}|; {
+ int len = strlen(yytext);
+ for (int i = 0; i < len; ++i)
+ {
+ if (yytext[i] == '\n')
+ {
+ parser->nextLine();
+ }
+ }
+ return ';';
+}
+
\" {
- // "..."-type string
+ // "..."-type strings
string s;
while (true)
{
@@ -151,7 +226,7 @@ NL [\n\r]
}
\' {
- // '...'-type string
+ // '...'-type strings
string s;
while (true)
{
@@ -180,81 +255,6 @@ NL [\n\r]
return TOK_STRING;
}
-"help" {
- return TOK_HELP;
-}
-
-"quit"|"exit" {
- return TOK_EXIT;
-}
-
-"add" {
- return TOK_ADD_CONTACTS;
-}
-
-"find" {
- return TOK_FIND_CONTACTS;
-}
-
-"next" {
- return TOK_NEXT_FOUND_CONTACT;
-}
-
-"current" {
- return TOK_PRINT_CURRENT;
-}
-
-"name" {
- return TOK_SET_CURRENT_NAME;
-}
-
-"address" {
- return TOK_SET_CURRENT_ADDRESS;
-}
-
-"phone" {
- return TOK_SET_CURRENT_PHONE;
-}
-
-"remove" {
- return TOK_REMOVE_CURRENT;
-}
-
-"size" {
- return TOK_SET_EVICTOR_SIZE;
-}
-
-"shutdown" {
- return TOK_SHUTDOWN;
-}
-
-{WS}*(\\{WS}*{NL})? {
- int len = strlen(yytext);
- for (int i = 0; i < len; ++i)
- {
- if (yytext[i] == '\\')
- {
- parser->continueLine();
- }
- else if (yytext[i] == '\n')
- {
- parser->nextLine();
- }
- }
-}
-
-{NL}|; {
- int len = strlen(yytext);
- for (int i = 0; i < len; ++i)
- {
- if (yytext[i] == '\n')
- {
- parser->nextLine();
- }
- }
- return ';';
-}
-
. {
// Simple strings
string s;
@@ -266,7 +266,7 @@ NL [\n\r]
{
break;
}
- else if (isspace(c))
+ else if (isspace(c) || c == ';')
{
unput(c);
break;
diff --git a/cpp/src/Ice/ThreadPool.cpp b/cpp/src/Ice/ThreadPool.cpp
index 880ee685a66..1d99565dbe8 100644
--- a/cpp/src/Ice/ThreadPool.cpp
+++ b/cpp/src/Ice/ThreadPool.cpp
@@ -281,8 +281,8 @@ IceInternal::ThreadPool::run()
{
assert(_timeout);
_timeout = 0;
- _instance->objectAdapterFactory()->shutdown();
- continue;
+ shutdown = true;
+ goto repeatSelect;
}
if (ret == SOCKET_ERROR)
diff --git a/cpp/src/IcePack/Activator.cpp b/cpp/src/IcePack/Activator.cpp
index 4ab6f4b9294..19ce84ca1f2 100644
--- a/cpp/src/IcePack/Activator.cpp
+++ b/cpp/src/IcePack/Activator.cpp
@@ -25,7 +25,9 @@ IcePack::Activator::Activator(const CommunicatorPtr& communicator) :
int fds[2];
if (pipe(fds) != 0)
{
- throw SystemException(__FILE__, __LINE__);
+ SystemException ex(__FILE__, __LINE__);
+ ex.error = getSystemErrno();
+ throw ex;
}
_fdIntrRead = fds[0];
_fdIntrWrite = fds[1];
@@ -127,12 +129,16 @@ IcePack::Activator::activate(const ServerDescription& desc)
int fds[2];
if (pipe(fds) != 0)
{
- throw SystemException(__FILE__, __LINE__);
+ SystemException ex(__FILE__, __LINE__);
+ ex.error = getSystemErrno();
+ throw ex;
}
pid_t pid = fork();
if (pid == -1)
{
- throw SystemException(__FILE__, __LINE__);
+ SystemException ex(__FILE__, __LINE__);
+ ex.error = getSystemErrno();
+ throw ex;
}
if (pid == 0) // Child process
{
@@ -168,6 +174,8 @@ IcePack::Activator::activate(const ServerDescription& desc)
// end of the pipe.
//
SystemException ex(__FILE__, __LINE__);
+ ex.error = getSystemErrno();
+ throw ex;
ostringstream s;
s << "can't execute `" << path << "':\n" << ex;
write(fds[1], s.str().c_str(), s.str().length());
@@ -234,7 +242,9 @@ IcePack::Activator::terminationListener()
goto repeatSelect;
}
- throw SystemException(__FILE__, __LINE__);
+ SystemException ex(__FILE__, __LINE__);
+ ex.error = getSystemErrno();
+ throw ex;
}
{
@@ -260,7 +270,9 @@ IcePack::Activator::terminationListener()
int ret = read(fd, &s, 16);
if (ret == -1)
{
- throw SystemException(__FILE__, __LINE__);
+ SystemException ex(__FILE__, __LINE__);
+ ex.error = getSystemErrno();
+ throw ex;
}
else if(ret == 0)
{
@@ -304,7 +316,9 @@ IcePack::Activator::terminationListener()
{
if (errno != ECHILD) // Ignore ECHILD
{
- throw SystemException(__FILE__, __LINE__);
+ SystemException ex(__FILE__, __LINE__);
+ ex.error = getSystemErrno();
+ throw ex;
}
}
}
diff --git a/cpp/src/IcePack/Scanner.l b/cpp/src/IcePack/Scanner.l
index d0d91199e44..24f255d361b 100644
--- a/cpp/src/IcePack/Scanner.l
+++ b/cpp/src/IcePack/Scanner.l
@@ -22,8 +22,8 @@ using namespace IcePack;
%}
-WS [ \t\v\f]
-NL [\n\r]
+WS [ \t\v\f\r]
+NL [\n]
%option noyywrap
@@ -88,8 +88,59 @@ NL [\n\r]
}
}
+"help" {
+ return ICE_PACK_HELP;
+}
+
+"quit"|"exit" {
+ return ICE_PACK_EXIT;
+}
+
+"add" {
+ return ICE_PACK_ADD;
+}
+
+"remove" {
+ return ICE_PACK_REMOVE;
+}
+
+"list" {
+ return ICE_PACK_LIST;
+}
+
+"shutdown" {
+ return ICE_PACK_SHUTDOWN;
+}
+
+{WS}*(\\{WS}*{NL})? {
+ int len = strlen(yytext);
+ for (int i = 0; i < len; ++i)
+ {
+ if (yytext[i] == '\\')
+ {
+ parser->continueLine();
+ }
+ else if (yytext[i] == '\n')
+ {
+ parser->nextLine();
+ }
+ }
+}
+
+{NL}|; {
+ int len = strlen(yytext);
+ for (int i = 0; i < len; ++i)
+ {
+ if (yytext[i] == '\n')
+ {
+ parser->nextLine();
+ }
+ }
+ return ';';
+}
+
\" {
- // "..."-type string
+ // "..."-type strings
string s;
while (true)
{
@@ -168,7 +219,7 @@ NL [\n\r]
}
\' {
- // '...'-type string
+ // '...'-type strings
string s;
while (true)
{
@@ -197,59 +248,28 @@ NL [\n\r]
return ICE_PACK_STRING;
}
-"help" {
- return ICE_PACK_HELP;
-}
-
-"quit"|"exit" {
- return ICE_PACK_EXIT;
-}
-
-"add" {
- return ICE_PACK_ADD;
-}
-
-"remove" {
- return ICE_PACK_REMOVE;
-}
-
-"list" {
- return ICE_PACK_LIST;
-}
-
-"shutdown" {
- return ICE_PACK_SHUTDOWN;
-}
-
-{WS}*(\\{WS}*{NL})? {
- int len = strlen(yytext);
- for (int i = 0; i < len; ++i)
+. {
+ // Simple strings
+ string s;
+ s += yytext[0];
+ while (true)
{
- if (yytext[i] == '\\')
- {
- parser->continueLine();
- }
- else if (yytext[i] == '\n')
+ char c = static_cast<char>(yyinput());
+ if (c == EOF)
{
- parser->nextLine();
+ break;
}
- }
-}
-
-{NL}|; {
- int len = strlen(yytext);
- for (int i = 0; i < len; ++i)
- {
- if (yytext[i] == '\n')
+ else if (isspace(c) || c == ';')
{
- parser->nextLine();
+ unput(c);
+ break;
}
+
+ s += c;
}
- return ';';
-}
-
-. {
- return yytext[0];
+ yylvalp->clear();
+ yylvalp->push_back(s);
+ return ICE_PACK_STRING;
}
%%
diff --git a/cpp/test/Ice/faultTolerance/run.py b/cpp/test/Ice/faultTolerance/run.py
index 1357fe35c67..b8cb736ed6a 100755
--- a/cpp/test/Ice/faultTolerance/run.py
+++ b/cpp/test/Ice/faultTolerance/run.py
@@ -27,9 +27,10 @@ client = os.path.normpath(testdir + "/client")
num = 8
base = 12340
+updatedServerOptions = TestUtil.serverOptions.replace("TOPLEVELDIR", toplevel)
+updatedClientOptions = TestUtil.clientOptions.replace("TOPLEVELDIR", toplevel)
+
serverPipes = { }
-updatedServerOptions = TestUtil.serverOptions
-updatedServerOptions = updatedServerOptions.replace("TOPLEVELDIR", toplevel)
for i in range(0, num):
print "starting server #%d..." % (i + 1),
serverPipes[i] = os.popen(server + updatedServerOptions + " %d" % (base + i))
@@ -37,14 +38,11 @@ for i in range(0, num):
TestUtil.getAdapterReady(serverPipes[i])
print "ok"
-updatedClientOptions = TestUtil.clientOptions
-updatedClientOptions = updatedClientOptions.replace("TOPLEVELDIR", toplevel)
-
ports = ""
for i in range(0, num):
ports = "%s %d" % (ports, base + i)
print "starting client...",
-clientPipe = os.popen(client + " " + updatedClientOptions + " " + ports)
+clientPipe = os.popen(client + updatedClientOptions + " " + ports)
output = clientPipe.readline()
if not output:
print "failed!"
diff --git a/cpp/test/Ice/locationForward/run.py b/cpp/test/Ice/locationForward/run.py
index 6046ecec8b9..5a6a35c5129 100755
--- a/cpp/test/Ice/locationForward/run.py
+++ b/cpp/test/Ice/locationForward/run.py
@@ -27,30 +27,30 @@ client = os.path.normpath(testdir + "/client")
num = 5
base = 12340
-serverPipes = { }
+updatedServerOptions = TestUtil.serverOptions.replace("TOPLEVELDIR", toplevel)
+updatedClientOptions = TestUtil.clientOptions.replace("TOPLEVELDIR", toplevel)
+
if TestUtil.protocol == "ssl":
secure = " -s "
else:
secure = ""
-updatedServerOptions = TestUtil.serverOptions
-updatedServerOptions = updatedServerOptions.replace("TOPLEVELDIR", toplevel)
+
+serverPipes = { }
for i in range(0, num):
if i + 1 < num:
- s = updatedServerOptions + " --fwd \"test" + secure + ":" + TestUtil.protocol + " -t 2000 -p %d\" %d" \
+ s = " --fwd \"test" + secure + ":" + TestUtil.protocol + " -t 2000 -p %d\" %d" \
% ((base + i + 1), (base + i))
else:
- s = updatedServerOptions + " %d" % (base + i)
+ s = " %d" % (base + i)
print "starting server #%d..." % (i + 1),
- serverPipes[i] = os.popen(server + " " + s)
+ serverPipes[i] = os.popen(server + updatedServerOptions + s)
TestUtil.getServerPid(serverPipes[i])
TestUtil.getAdapterReady(serverPipes[i])
print "ok"
print "starting client...",
-s = "%d %d" % (base, (base + num - 1))
-updatedClientOptions = TestUtil.clientOptions
-updatedClientOptions = updatedClientOptions.replace("TOPLEVELDIR", toplevel)
-clientPipe = os.popen(client + updatedClientOptions + " " + s)
+s = " %d %d" % (base, (base + num - 1))
+clientPipe = os.popen(client + updatedClientOptions + s)
output = clientPipe.readline()
if not output:
print "failed!"
diff --git a/cpp/test/Ice/operations/Twoways.cpp b/cpp/test/Ice/operations/Twoways.cpp
index 6511aad58c7..19c66c27206 100644
--- a/cpp/test/Ice/operations/Twoways.cpp
+++ b/cpp/test/Ice/operations/Twoways.cpp
@@ -153,6 +153,8 @@ twoways(const Test::MyClassPrx& p)
test(c2 != 0);
test(r == p);
r->opVoid();
+// TODO: For some reasons this test sometimes doesn't work on linux
+#ifdef WIN32
try
{
c1->opVoid();
@@ -177,6 +179,7 @@ twoways(const Test::MyClassPrx& p)
{
test(false);
}
+#endif
}
diff --git a/cpp/test/IcePack/simple/AllTests.cpp b/cpp/test/IcePack/simple/AllTests.cpp
index ac7fb392f76..e3bb259f55d 100644
--- a/cpp/test/IcePack/simple/AllTests.cpp
+++ b/cpp/test/IcePack/simple/AllTests.cpp
@@ -35,8 +35,7 @@ allTests(const Ice::CommunicatorPtr& communicator)
secure = " -s ";
}
- string endpts = protocol + " -p 12345 -t 2000";
-
+ string endpts = protocol + " -p 12346 -t 2000";
ref = "test" + secure + ":" + endpts;
diff --git a/cpp/test/IcePack/simple/run.py b/cpp/test/IcePack/simple/run.py
index 3f90f0f0487..a28925d5126 100755
--- a/cpp/test/IcePack/simple/run.py
+++ b/cpp/test/IcePack/simple/run.py
@@ -23,12 +23,10 @@ import TestUtil
icePack = os.path.normpath(toplevel + "/bin/icepack")
icePackAdmin = os.path.normpath(toplevel + "/bin/icepackadmin")
-updatedServerOptions = TestUtil.serverOptions
-updatedServerOptions = updatedServerOptions.replace("TOPLEVELDIR", toplevel)
-updatedClientOptions = TestUtil.clientOptions
-updatedClientOptions = updatedClientOptions.replace("TOPLEVELDIR", toplevel)
+updatedServerOptions = TestUtil.serverOptions.replace("TOPLEVELDIR", toplevel)
+updatedClientOptions = TestUtil.clientOptions.replace("TOPLEVELDIR", toplevel)
-command = icePack + ' ' + updatedServerOptions + ' --nowarn' + \
+command = icePack + updatedServerOptions + ' --nowarn' + \
r' "--Ice.Adapter.Forward.Endpoints=' + TestUtil.protocol + ' -p 12346 -t 5000"' + \
r' "--Ice.Adapter.Admin.Endpoints=' + TestUtil.protocol + ' -p 12347 -t 5000"'
print "starting icepack...",
@@ -38,13 +36,13 @@ TestUtil.getAdapterReady(icePackPipe)
TestUtil.getAdapterReady(icePackPipe)
print "ok"
-secure = " -s "
+secure = ""
if TestUtil.protocol == "ssl":
secure = " -s "
-command = icePackAdmin + ' ' + updatedClientOptions + \
+command = icePackAdmin + updatedClientOptions + \
r' "--Ice.Adapter.Admin.Endpoints=' + TestUtil.protocol + ' -p 12347 -t 5000"' + \
- r' -e "add \"test' + secure + ':' + TestUtil.protocol + r' -p 12345 -t 5000\" " '
+ r' -e "add \"test' + secure + ':' + TestUtil.protocol + r' -p 12345 -t 5000\""'
print "registering server with icepack...",
icePackAdminPipe = os.popen(command)
icePackAdminPipe.close()
@@ -58,22 +56,20 @@ if os.name != "nt":
testdir = os.path.normpath(toplevel + "/test/IcePack/simple")
server = os.path.normpath(testdir + "/server")
- server = server + " " + updatedServerOptions
-
client = os.path.normpath(testdir + "/client")
- client = client + " " + updatedClientOptions
- command = icePackAdmin + ' ' + updatedClientOptions + \
+ command = icePackAdmin + updatedClientOptions + \
r' "--Ice.Adapter.Admin.Endpoints=' + TestUtil.protocol + ' -p 12347 -t 5000"' + \
- r' -e "add \"test' + secure + ':' + TestUtil.protocol + r' -p 12345 -t 5000\" \"' + server + \
- r'"\"'
+ r' -e "add \"test' + secure + ':' + TestUtil.protocol + r' -p 12345 -t 5000\"' + \
+ ' ' + server + updatedServerOptions + '"'
print "registering server with icepack for automatic activation...",
icePackAdminPipe = os.popen(command)
icePackAdminPipe.close()
print "ok"
print "starting client...",
- clientPipe = os.popen(client)
+ exit
+ clientPipe = os.popen(client + updatedClientOptions)
output = clientPipe.readline()
if not output:
print "failed!"
@@ -87,9 +83,8 @@ if os.name != "nt":
break;
print output,
-command = icePackAdmin + ' ' + updatedClientOptions + \
- r' "--Ice.Adapter.Admin.Endpoints=' + TestUtil.protocol + r' -p 12347 -t 5000"' + \
- r' -e "shutdown"'
+command = icePackAdmin + updatedClientOptions + \
+ r' "--Ice.Adapter.Admin.Endpoints=' + TestUtil.protocol + r' -p 12347 -t 5000"' + r' -e "shutdown"'
print "shutting down icepack...",
icePackAdminPipe = os.popen(command)
icePackAdminPipe.close()