diff options
author | Eric Windisch <eric@cloudscaling.com> | 2013-01-24 16:28:43 -0500 |
---|---|---|
committer | Eric Windisch <eric@cloudscaling.com> | 2013-03-01 10:54:05 -0500 |
commit | cb26af207dbcea5fc88ad5f66da80fba5d76cb04 (patch) | |
tree | 9da183e01a2da3f99bb904cbd2b9c15863f2c7b8 /tests/unit/rpc/matchmaker_common.py | |
parent | 2b418be864a5aa5ba135f7651e83051cf3bf9ce6 (diff) | |
download | oslo-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.py | 72 |
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), []) |