summaryrefslogtreecommitdiff
path: root/cpp/test/IceStorm/rep1
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2016-11-25 13:13:22 +0100
committerBenoit Foucher <benoit@zeroc.com>2016-11-25 13:13:22 +0100
commitdcdc32af1fced49d80a8ccd93230e15d91ab45d8 (patch)
treeeb69e2555fbd54496fce8a33f4dd610e1473ff51 /cpp/test/IceStorm/rep1
parentC# IceSSL/configuration log expired certificate exceptions. (diff)
downloadice-dcdc32af1fced49d80a8ccd93230e15d91ab45d8.tar.bz2
ice-dcdc32af1fced49d80a8ccd93230e15d91ab45d8.tar.xz
ice-dcdc32af1fced49d80a8ccd93230e15d91ab45d8.zip
Refactored test scripts
Diffstat (limited to 'cpp/test/IceStorm/rep1')
-rw-r--r--cpp/test/IceStorm/rep1/Publisher.cpp5
-rw-r--r--cpp/test/IceStorm/rep1/Sub.cpp4
-rw-r--r--cpp/test/IceStorm/rep1/Subscriber.cpp4
-rwxr-xr-xcpp/test/IceStorm/rep1/run.py292
-rw-r--r--cpp/test/IceStorm/rep1/test.py290
5 files changed, 297 insertions, 298 deletions
diff --git a/cpp/test/IceStorm/rep1/Publisher.cpp b/cpp/test/IceStorm/rep1/Publisher.cpp
index a06662e4b29..b90f8f7300a 100644
--- a/cpp/test/IceStorm/rep1/Publisher.cpp
+++ b/cpp/test/IceStorm/rep1/Publisher.cpp
@@ -11,6 +11,7 @@
#include <IceUtil/Options.h>
#include <IceUtil/IceUtil.h>
#include <IceStorm/IceStorm.h>
+#include <TestCommon.h>
#include <Single.h>
using namespace std;
@@ -120,10 +121,10 @@ main(int argc, char* argv[])
{
int status;
CommunicatorPtr communicator;
-
+ InitializationData initData = getTestInitData(argc, argv);
try
{
- communicator = initialize(argc, argv);
+ communicator = initialize(argc, argv, initData);
status = run(argc, argv, communicator);
}
catch(const Exception& ex)
diff --git a/cpp/test/IceStorm/rep1/Sub.cpp b/cpp/test/IceStorm/rep1/Sub.cpp
index 5192f61e548..55423322069 100644
--- a/cpp/test/IceStorm/rep1/Sub.cpp
+++ b/cpp/test/IceStorm/rep1/Sub.cpp
@@ -94,10 +94,10 @@ main(int argc, char* argv[])
{
int status;
CommunicatorPtr communicator;
-
+ InitializationData initData = getTestInitData(argc, argv);
try
{
- communicator = initialize(argc, argv);
+ communicator = initialize(argc, argv, initData);
status = run(argc, argv, communicator);
}
catch(const Exception& ex)
diff --git a/cpp/test/IceStorm/rep1/Subscriber.cpp b/cpp/test/IceStorm/rep1/Subscriber.cpp
index fe23907529f..be1b8e0e36c 100644
--- a/cpp/test/IceStorm/rep1/Subscriber.cpp
+++ b/cpp/test/IceStorm/rep1/Subscriber.cpp
@@ -186,10 +186,10 @@ main(int argc, char* argv[])
{
int status;
CommunicatorPtr communicator;
-
+ InitializationData initData = getTestInitData(argc, argv);
try
{
- communicator = initialize(argc, argv);
+ communicator = initialize(argc, argv, initData);
status = run(argc, argv, communicator);
}
catch(const Exception& ex)
diff --git a/cpp/test/IceStorm/rep1/run.py b/cpp/test/IceStorm/rep1/run.py
deleted file mode 100755
index 2d058a12d22..00000000000
--- a/cpp/test/IceStorm/rep1/run.py
+++ /dev/null
@@ -1,292 +0,0 @@
-#!/usr/bin/env python
-# **********************************************************************
-#
-# Copyright (c) 2003-2016 ZeroC, Inc. All rights reserved.
-#
-# This copy of Ice is licensed to you under the terms described in the
-# ICE_LICENSE file included in this distribution.
-#
-# **********************************************************************
-
-import os, sys, time, re
-
-path = [ ".", "..", "../..", "../../..", "../../../.." ]
-head = os.path.dirname(sys.argv[0])
-if len(head) > 0:
- path = [os.path.join(head, p) for p in path]
-path = [os.path.abspath(p) for p in path if os.path.exists(os.path.join(p, "scripts", "TestUtil.py")) ]
-if len(path) == 0:
- raise RuntimeError("can't find toplevel directory!")
-sys.path.append(os.path.join(path[0], "scripts"))
-import TestUtil, IceStormUtil
-
-publisher = os.path.join(os.getcwd(), TestUtil.getTestExecutable("publisher"))
-subscriber = os.path.join(os.getcwd(), TestUtil.getTestExecutable("subscriber"))
-subscriber2 = os.path.join(os.getcwd(), TestUtil.getTestExecutable("sub"))
-
-targets = []
-if TestUtil.appverifier:
- targets = [TestUtil.getIceBox(), publisher, subscriber, subscriber2, TestUtil.getIceBoxAdmin(), \
- TestUtil.getIceStormAdmin()]
- TestUtil.setAppVerifierSettings(targets, cwd = os.getcwd())
-
-def runsub(opt, ref, arg = "", echo=False):
- qos = ""
- if opt == "twoway":
- qos = " --twoway"
- if opt == "ordered":
- qos = " --ordered"
- return TestUtil.startServer(subscriber, ref + arg + qos)
-
-def runpub(ref, arg = "", echo=False):
- return TestUtil.startClient(publisher, ref + arg)
-
-def runtest(opt, ref, subopt="", pubopt=""):
- subscriberProc = runsub(opt, ref, subopt)
- publisherProc = runpub(ref, pubopt)
- publisherProc.waitTestSuccess()
- subscriberProc.waitTestSuccess()
-
-def runsub2(replica = -1, expect = None):
- proc = TestUtil.startServer(subscriber2, icestorm.reference(replica) + ' --id foo', count=0, echo = False)
- if expect:
- proc.expect(expect)
- proc.wait()
- else:
- proc.waitTestSuccess()
-
-def rununsub2(replica = -1, expect = None):
- if replica == -1:
- proc = TestUtil.startServer(subscriber2, icestorm.reference(replica) + ' --id foo --unsub', count=0)
- proc.waitTestSuccess()
- # Else we first subscribe to this replica, then unsub. We
- # shouldn't get an AlreadySubscribedException.
- proc = TestUtil.startServer(subscriber2, icestorm.reference(replica) + ' --id foo', count=0, echo = False)
- if expect:
- proc.expect(expect)
- proc.wait()
- return
- else:
- proc.waitTestSuccess()
- proc = TestUtil.startServer(subscriber2, icestorm.reference(replica) + ' --id foo --unsub', count=0)
- proc.waitTestSuccess()
-
-icestorm = IceStormUtil.init(TestUtil.toplevel, os.getcwd(), "replicated", replicatedPublisher=True, additional =
- ' --IceStorm.Election.MasterTimeout=2' +
- ' --IceStorm.Election.ElectionTimeout=2' +
- ' --IceStorm.Election.ResponseTimeout=2')
-icestorm.start()
-
-sys.stdout.write("testing topic creation across replicas... ")
-sys.stdout.flush()
-icestorm.admin("create single")
-
-for replica in range(0, 3):
- icestorm.adminForReplica(replica, "create single", "error: topic `single' exists")
-print("ok")
-
-sys.stdout.write("testing topic destruction across replicas... ")
-sys.stdout.flush()
-icestorm.admin("destroy single")
-
-for replica in range(0, 3):
- icestorm.adminForReplica(replica, "destroy single", "error: couldn't find topic `single'")
-print("ok")
-
-sys.stdout.write("testing topic creation without replica... ")
-sys.stdout.flush()
-
-icestorm.stopReplica(0)
-icestorm.admin("create single")
-
-for replica in range(1, 3):
- icestorm.adminForReplica(replica, "create single", "error: topic `single' exists")
-
-icestorm.adminForReplica(0, "create single", ["ConnectionRefused", "ConnectFailed"])
-
-icestorm.startReplica(0, echo=False)
-
-icestorm.adminForReplica(0, "create single", "error: topic `single' exists")
-print("ok")
-
-icestorm.admin("destroy single")
-
-sys.stdout.write("testing topic creation without master... ")
-sys.stdout.flush()
-icestorm.stopReplica(2)
-
-icestorm.admin("create single")
-
-for replica in range(0, 2):
- icestorm.adminForReplica(replica, "create single", "error: topic `single' exists")
-
-icestorm.adminForReplica(2, "create single", ["ConnectionRefused", "ConnectFailed"])
-
-icestorm.startReplica(2, echo=False)
-
-icestorm.adminForReplica(2, "create single", "error: topic `single' exists")
-print("ok")
-
-# All replicas are running
-
-sys.stdout.write("testing topic destruction without replica... ")
-sys.stdout.flush()
-icestorm.stopReplica(0)
-
-icestorm.admin("destroy single")
-
-for replica in range(1, 3):
- icestorm.adminForReplica(replica, "destroy single", "error: couldn't find topic `single'")
-
-icestorm.adminForReplica(0, "destroy single", ["ConnectionRefused", "ConnectFailed"])
-
-icestorm.startReplica(0, echo=False)
-
-icestorm.adminForReplica(0, "destroy single", "error: couldn't find topic `single'")
-print("ok")
-
-sys.stdout.write("testing topic destruction without master... ")
-sys.stdout.flush()
-
-icestorm.admin("create single")
-icestorm.stopReplica(2)
-
-icestorm.admin("destroy single")
-
-for replica in range(0, 2):
- icestorm.adminForReplica(replica, "destroy single", "error: couldn't find topic `single'")
-
-icestorm.adminForReplica(2, "destroy single", ["ConnectionRefused", "ConnectFailed"])
-
-icestorm.startReplica(2, echo=False)
-
-icestorm.adminForReplica(2, "destroy single", "error: couldn't find topic `single'")
-print("ok")
-
-# Now test subscription/unsubscription on all replicas.
-
-icestorm.admin("create single")
-
-sys.stdout.write("testing subscription across replicas... ")
-sys.stdout.flush()
-runsub2()
-
-for replica in range(0, 3):
- runsub2(replica, "IceStorm::AlreadySubscribed")
-print("ok")
-
-sys.stdout.write("testing unsubscription across replicas... ")
-sys.stdout.flush()
-rununsub2()
-
-for replica in range(0, 3):
- rununsub2(replica)
-print("ok")
-
-sys.stdout.write("testing subscription without master... ")
-sys.stdout.flush()
-icestorm.stopReplica(2)
-
-runsub2()
-
-for replica in range(0, 2):
- runsub2(replica, "IceStorm::AlreadySubscribed")
-
-runsub2(2, ["ConnectionRefused", "ConnectFailed"])
-
-icestorm.startReplica(2, echo=False)
-
-runsub2(2, "IceStorm::AlreadySubscribed")
-print("ok")
-
-sys.stdout.write("testing unsubscription without master... ")
-sys.stdout.flush()
-icestorm.stopReplica(2)
-
-rununsub2()
-
-for replica in range(0, 2):
- rununsub2(replica)
-
-rununsub2(2, ["ConnectionRefused", "ConnectFailed"])
-
-icestorm.startReplica(2, echo=False)
-
-rununsub2(2)
-print("ok")
-
-sys.stdout.write("testing subscription without replica... ")
-sys.stdout.flush()
-icestorm.stopReplica(0)
-
-runsub2()
-
-for replica in range(1, 3):
- runsub2(replica, "IceStorm::AlreadySubscribed")
-
-runsub2(0, ["ConnectionRefused", "ConnectFailed"])
-
-icestorm.startReplica(0, echo=False)
-
-runsub2(0, "IceStorm::AlreadySubscribed")
-print("ok")
-
-sys.stdout.write("testing unsubscription without replica... ")
-sys.stdout.flush()
-icestorm.stopReplica(0)
-
-rununsub2()
-
-for replica in range(1, 3):
- rununsub2(replica)
-
-rununsub2(0, ["ConnectionRefused", "ConnectFailed"])
-
-icestorm.startReplica(0, echo=False)
-
-rununsub2(0)
-print("ok")
-
-# All replicas are running
-
-sys.stdout.write("running twoway subscription test... ")
-sys.stdout.flush()
-runtest("twoway", icestorm.reference())
-print("ok")
-
-sys.stdout.write("running ordered subscription test... ")
-sys.stdout.flush()
-runtest("ordered", icestorm.reference())
-print("ok")
-
-icestorm.stopReplica(2)
-
-sys.stdout.write("running twoway, ordered subscription test without master... ")
-sys.stdout.flush()
-runtest("twoway", icestorm.reference())
-runtest("ordered", icestorm.reference())
-print("ok")
-
-icestorm.startReplica(2, echo = False)
-icestorm.stopReplica(0)
-
-sys.stdout.write("running twoway, ordered subscription test without replica... ")
-sys.stdout.flush()
-runtest("twoway", icestorm.reference())
-runtest("ordered", icestorm.reference())
-print("ok")
-
-icestorm.startReplica(0, echo = False)
-
-sys.stdout.write("running cycle publishing test... ")
-sys.stdout.flush()
-runtest("twoway", icestorm.reference(), pubopt=" --cycle")
-print("ok")
-
-sys.stdout.write("stopping replicas... ")
-sys.stdout.flush()
-icestorm.stop()
-print("ok")
-
-if TestUtil.appverifier:
- TestUtil.appVerifierAfterTestEnd(targets, cwd = os.getcwd())
diff --git a/cpp/test/IceStorm/rep1/test.py b/cpp/test/IceStorm/rep1/test.py
new file mode 100644
index 00000000000..7385a9d8d25
--- /dev/null
+++ b/cpp/test/IceStorm/rep1/test.py
@@ -0,0 +1,290 @@
+# -*- coding: utf-8 -*-
+# **********************************************************************
+#
+# Copyright (c) 2003-2016 ZeroC, Inc. All rights reserved.
+#
+# This copy of Ice is licensed to you under the terms described in the
+# ICE_LICENSE file included in this distribution.
+#
+# **********************************************************************
+
+#
+# Make sure IceStorm and the subscriber use the same buffer size for
+# sending/receiving datagrams. This ensures the test works with bogus
+# OS configurations where the reicever buffer size is smaller than the
+# send buffer size (causing the received messages to be
+# truncated). See also bug #6070.
+#
+props = {
+ "IceStorm.Election.MasterTimeout" : 2,
+ "IceStorm.Election.ElectionTimeout" : 2,
+ "IceStorm.Election.ResponseTimeout" : 2
+}
+
+icestorm = [ IceStorm(replica=i, nreplicas=3, props = props) for i in range(0,3) ]
+
+class IceStormRep1TestCase(IceStormTestCase):
+
+ def runClientSide(self, current):
+
+ def checkExpect(output, expect):
+ if not expect:
+ return
+
+ if type(expect) == str:
+ expect = [expect]
+
+ for e in expect:
+ if output.find(e) >= 0:
+ return
+ else:
+ raise RuntimeError("unexected output `{0}' (expected `{1}')".format(output, expect))
+
+ def adminForReplica(replica, cmd, expect):
+ checkExpect(self.runadmin(current, cmd, instance=self.icestorm[replica], quiet=True, exitstatus=1),
+ expect)
+
+ def stopReplica(num):
+ self.icestorm[num].shutdown(current)
+ self.icestorm[num].stop(current, True)
+
+ def startReplica(num):
+ self.icestorm[num].start(current)
+
+ def runtest(s="", p=""):
+ ClientServerTestCase(client=Publisher(args=p.split(" ")),
+ server=Subscriber(args=s.split(" "))).run(current)
+
+ def runsub2(replica=None, expect=None):
+ subscriber = Subscriber(exe="sub",
+ instance=None if replica is None else self.icestorm[replica],
+ args=["--id", "foo"],
+ readyCount=0,
+ quiet=True)
+ subscriber.run(current, exitstatus=1 if expect else 0)
+ checkExpect(subscriber.getOutput(), expect)
+
+ def rununsub2(replica=None, expect=None):
+ sub = Subscriber(exe="sub",
+ instance=None if replica is None else self.icestorm[replica],
+ args=["--id", "foo"],
+ readyCount=0,
+ quiet=True)
+
+ if replica is None:
+ sub.run(current, args=["--unsub"])
+ # Else we first subscribe to this replica, then unsub. We
+ # shouldn't get an AlreadySubscribedException.
+ sub.run(current, exitstatus=1 if expect else 0)
+ if expect:
+ checkExpect(sub.getOutput(), expect)
+ return
+
+ sub.run(current, args=["--unsub"])
+
+ current.write("testing topic creation across replicas... ")
+ self.runadmin(current, "create single")
+ for replica in range(0, 3):
+ adminForReplica(replica, "create single", "error: topic `single' exists")
+ current.writeln("ok")
+
+ current.write("testing topic destruction across replicas... ")
+ sys.stdout.flush()
+ self.runadmin(current, "destroy single")
+
+ for replica in range(0, 3):
+ adminForReplica(replica, "destroy single", "error: couldn't find topic `single'")
+ current.writeln("ok")
+
+ current.write("testing topic creation without replica... ")
+
+ stopReplica(0)
+
+ self.runadmin(current, "create single")
+
+ for replica in range(1, 3):
+ adminForReplica(replica, "create single", "error: topic `single' exists")
+
+ adminForReplica(0, "create single", ["ConnectionRefused", "ConnectFailed"])
+
+ startReplica(0)
+
+ adminForReplica(0, "create single", "error: topic `single' exists")
+ current.writeln("ok")
+
+ self.runadmin(current, "destroy single")
+
+ current.write("testing topic creation without master... ")
+ sys.stdout.flush()
+
+ stopReplica(2)
+
+ self.runadmin(current, "create single")
+
+ for replica in range(0, 2):
+ adminForReplica(replica, "create single", "error: topic `single' exists")
+
+ adminForReplica(2, "create single", ["ConnectionRefused", "ConnectFailed"])
+
+ startReplica(2)
+
+ adminForReplica(2, "create single", "error: topic `single' exists")
+ current.writeln("ok")
+
+ # All replicas are running
+
+ current.write("testing topic destruction without replica... ")
+
+ stopReplica(0)
+
+ self.runadmin(current, "destroy single")
+
+ for replica in range(1, 3):
+ adminForReplica(replica, "destroy single", "error: couldn't find topic `single'")
+
+ adminForReplica(0, "destroy single", ["ConnectionRefused", "ConnectFailed"])
+
+ startReplica(0)
+
+ adminForReplica(0, "destroy single", "error: couldn't find topic `single'")
+ current.writeln("ok")
+
+ current.write("testing topic destruction without master... ")
+ sys.stdout.flush()
+
+ self.runadmin(current, "create single")
+ stopReplica(2)
+
+ self.runadmin(current, "destroy single")
+
+ for replica in range(0, 2):
+ adminForReplica(replica, "destroy single", "error: couldn't find topic `single'")
+
+ adminForReplica(2, "destroy single", ["ConnectionRefused", "ConnectFailed"])
+
+ startReplica(2)
+
+ adminForReplica(2, "destroy single", "error: couldn't find topic `single'")
+ current.writeln("ok")
+
+ # Now test subscription/unsubscription on all replicas.
+
+ self.runadmin(current, "create single")
+
+ current.write("testing subscription across replicas... ")
+ sys.stdout.flush()
+ runsub2()
+
+ for replica in range(0, 3):
+ runsub2(replica, "IceStorm::AlreadySubscribed")
+ current.writeln("ok")
+
+ current.write("testing unsubscription across replicas... ")
+ sys.stdout.flush()
+ rununsub2()
+
+ for replica in range(0, 3):
+ rununsub2(replica)
+ current.writeln("ok")
+
+ current.write("testing subscription without master... ")
+ sys.stdout.flush()
+ stopReplica(2)
+
+ runsub2()
+
+ for replica in range(0, 2):
+ runsub2(replica, "IceStorm::AlreadySubscribed")
+
+ runsub2(2, ["ConnectionRefused", "ConnectFailed"])
+
+ startReplica(2)
+
+ runsub2(2, "IceStorm::AlreadySubscribed")
+ current.writeln("ok")
+
+ current.write("testing unsubscription without master... ")
+ sys.stdout.flush()
+ stopReplica(2)
+
+ rununsub2()
+
+ for replica in range(0, 2):
+ rununsub2(replica)
+
+ rununsub2(2, ["ConnectionRefused", "ConnectFailed"])
+
+ startReplica(2)
+
+ rununsub2(2)
+ current.writeln("ok")
+
+ current.write("testing subscription without replica... ")
+ sys.stdout.flush()
+ stopReplica(0)
+
+ runsub2()
+
+ for replica in range(1, 3):
+ runsub2(replica, "IceStorm::AlreadySubscribed")
+
+ runsub2(0, ["ConnectionRefused", "ConnectFailed"])
+
+ startReplica(0)
+
+ runsub2(0, "IceStorm::AlreadySubscribed")
+ current.writeln("ok")
+
+ current.write("testing unsubscription without replica... ")
+ stopReplica(0)
+
+ rununsub2()
+
+ for replica in range(1, 3):
+ rununsub2(replica)
+
+ rununsub2(0, ["ConnectionRefused", "ConnectFailed"])
+
+ startReplica(0)
+
+ rununsub2(0)
+ current.writeln("ok")
+
+ # All replicas are running
+
+ current.write("running twoway subscription test... ")
+ runtest("--twoway")
+ current.writeln("ok")
+
+ current.write("running ordered subscription test... ")
+ runtest("--ordered")
+ current.writeln("ok")
+
+ stopReplica(2)
+
+ current.write("running twoway, ordered subscription test without master... ")
+ runtest("--twoway")
+ runtest("--ordered")
+ current.writeln("ok")
+
+ startReplica(2)
+ stopReplica(0)
+
+ current.write("running twoway, ordered subscription test without replica... ")
+ runtest("--twoway")
+ runtest("--ordered")
+ current.writeln("ok")
+
+ startReplica(0)
+
+ current.write("running cycle publishing test... ")
+ sys.stdout.flush()
+ runtest("--twoway", "--cycle")
+ current.writeln("ok")
+
+ current.write("stopping replicas... ")
+ sys.stdout.flush()
+ self.stopIceStorm(current)
+ current.writeln("ok")
+
+TestSuite(__file__, [ IceStormRep1TestCase("replicated", icestorm=icestorm) ], multihost=False)