summaryrefslogtreecommitdiffstats
path: root/tests/unit/rpc/matchmaker_common.py
diff options
context:
space:
mode:
authorEric Windisch <eric@cloudscaling.com>2013-01-24 16:28:43 -0500
committerEric Windisch <eric@cloudscaling.com>2013-03-01 10:54:05 -0500
commitcb26af207dbcea5fc88ad5f66da80fba5d76cb04 (patch)
tree9da183e01a2da3f99bb904cbd2b9c15863f2c7b8 /tests/unit/rpc/matchmaker_common.py
parent2b418be864a5aa5ba135f7651e83051cf3bf9ce6 (diff)
downloadoslo-cb26af207dbcea5fc88ad5f66da80fba5d76cb04.tar.gz
oslo-cb26af207dbcea5fc88ad5f66da80fba5d76cb04.tar.xz
oslo-cb26af207dbcea5fc88ad5f66da80fba5d76cb04.zip
Redis-based matchmaker
Introduces a reference implementation of a matchmaker (based on redis) that supports dynamic host/topic registrations, host expiration, and hooks for consuming applications to acknowledge or neg-acknowledge topic.host service availability. Implements blueprint advanced-matchmaking Change-Id: I8608d2089fca118b0e369f2eb5c6aedacf6821fe
Diffstat (limited to 'tests/unit/rpc/matchmaker_common.py')
-rw-r--r--tests/unit/rpc/matchmaker_common.py72
1 files changed, 72 insertions, 0 deletions
diff --git a/tests/unit/rpc/matchmaker_common.py b/tests/unit/rpc/matchmaker_common.py
new file mode 100644
index 0000000..154162d
--- /dev/null
+++ b/tests/unit/rpc/matchmaker_common.py
@@ -0,0 +1,72 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2012 Cloudscaling Group, Inc
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import logging
+
+
+LOG = logging.getLogger(__name__)
+
+
+class _MatchMakerDirectedTopicTestCase(object):
+ """Mix-in to test directed topics."""
+ def test_firstval_is_directed_topic(self):
+ matches = self.driver.queues(self.topic)
+ topics = map(lambda x: x[0], matches)
+
+ for topic in topics:
+ self.assertTrue('.' in topic)
+
+
+class _MatchMakerTestCase(_MatchMakerDirectedTopicTestCase):
+ def test_valid_host_matches(self):
+ queues = self.driver.queues(self.topic)
+ matched_hosts = map(lambda x: x[1], queues)
+
+ for host in matched_hosts:
+ self.assertTrue(host in self.hosts)
+
+ def test_fanout_host_matches(self):
+ """For known hosts, see if they're in fanout."""
+ queues = self.driver.queues("fanout~" + self.topic)
+ matched_hosts = map(lambda x: x[1], queues)
+
+ LOG.info("Received result from matchmaker: %s", queues)
+ for host in self.hosts:
+ self.assertTrue(host in matched_hosts)
+
+
+class _MatchMakerDynRegTestCase(object):
+ def test_registers_host(self):
+ """
+ Registers a host, ensures it is registered.
+ """
+ self.driver.register(self.topic, self.hosts[0])
+
+ match = self.driver.queues(self.topic)
+ self.assertEqual(match[0][1], self.hosts[0])
+
+ def test_unregister(self):
+ """
+ Tests that hosts unregister cleanly.
+ Registers a host, ensures it is registered,
+ then unregisters and ensures is no
+ longer registered.
+ """
+ # Can only unregister if registrations work.
+ self.test_registers_host()
+
+ self.driver.unregister(self.topic, self.hosts[0])
+ self.assertEqual(self.driver.queues(self.topic), [])