diff options
author | Benoit Foucher <benoit@zeroc.com> | 2016-11-25 13:13:22 +0100 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2016-11-25 13:13:22 +0100 |
commit | dcdc32af1fced49d80a8ccd93230e15d91ab45d8 (patch) | |
tree | eb69e2555fbd54496fce8a33f4dd610e1473ff51 /cpp/test/IceStorm/rep1 | |
parent | C# IceSSL/configuration log expired certificate exceptions. (diff) | |
download | ice-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.cpp | 5 | ||||
-rw-r--r-- | cpp/test/IceStorm/rep1/Sub.cpp | 4 | ||||
-rw-r--r-- | cpp/test/IceStorm/rep1/Subscriber.cpp | 4 | ||||
-rwxr-xr-x | cpp/test/IceStorm/rep1/run.py | 292 | ||||
-rw-r--r-- | cpp/test/IceStorm/rep1/test.py | 290 |
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) |