712a6fa482
This patch makes output of `tox -epy34` to finish with following message: > py34: commands succeeded > congratulations :) Issues: * module "__builtin__" was renamed to "builtins" in Python 3 Related modules: - rally.api - tests.unit.benchmark.scenarios.vm.test_utils * function "map"/"filter" returns "builtins.map"/"builtins.filter" object in Python 3 instead of list in Python 2. "builtins.map" and "builtins.filter" object is not subscriptable and has no len(), so list comprehension is preferable to use and py2/py3 compatible way. Related modules: - rally.benchmark.context.sahara.sahara_edp - rally.benchmark.processing.plot - rally.benchmark.sla.base - rally.benchmark.types - rally.cmd.commands.task - rally.cmd.commands.verify - tests.unit.benchmark.scenarios.test_base - tests.unit.benchmark.wrappers.test_keystone - tests.unit.cmd.commands.test_task - tests.unit.cmd.commands.test_verify * dict.keys()/dict.values() returns "dict_keys"/"dict_values" object in Python 3 instead of list in Python 2. so list(dict) and list(dict.values()) should be used instead. Related modules: - rally.benchmark.scenarios.utils - rally.benchmark.scenarios.vm.vmtasks - tests.unit.cmd.commands.test_show - tests.unit.common.test_broker - tests.unit.deploy.engines.test_fuel - tests.unit.fakes * Some changes was made in Python 3 related to data model, so we should change our inspect code. See code changes for more details Related modules: - rally.cmd.cliutils - rally.common.utils * ConfigParser is more strict for duplicate items in Python 3, so duplicates are removed Related files: - rally/verification/tempest/config.ini * Exception object doesn't have "message" attribute in Python 3, so if we want to get it, the most proper way is using "getattr" Related modules: - rally.verification.tempest.config * "mock.MagicMock" is not sortable in Python 3, so we should add required attributes to fix that. Related modules: - tests.unit.benchmark.context.test_base * assertSequenceEqual assertation method was added in tests.unit.test to compare sequence objects Related modules: - tests.unit.benchmark.context.cleanup.test_resources - tests.unit.benchmark.scenarios.nova.test_utils * function "range" returns "range" object in Python 3 instead of list in Python 2. Related modules: - tests.unit.benchmark.processing.test_utils * keyword arguments should be transmitted to self.assertRaises as kwargs, not like a dict Related modules: - tests.unit.benchmark.scenarios.dummy.test_dummy Additional changes: * Python 2.6 was added to setup.cfg, since Rally supports it. * py33, py34 environments were added to tox.ini * wrong ignore path was removed from tox.ini * made items of bash complition sorted Several tests are skipped in Python 3 env. For more details see notes in code: - tests.unit.benchmark.processing.test_plot.PlotTestCase.test__process_main_time - tests.unit.benchmark.processing.test_plot.PlotTestCase.test__process_atomic_time - tests.unit.common.test_utils.MethodClassTestCase.test_method_class_for_class_level_method During porting Rally to Python3, several issues found and fixed in TempestContext and its unit tests: - If process of cleanup is failed, exception is handled and cleanup is marked as successfull. This issue was fixed and CleanUpException was added to rally.exception module - Cleanup was called with wrong path. Change-Id: If04e873790dcb4c9c882d4be4bf40479deedd36d
86 lines
2.9 KiB
Python
86 lines
2.9 KiB
Python
# Copyright 2014: Mirantis Inc.
|
|
# All Rights Reserved.
|
|
#
|
|
# 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 collections
|
|
|
|
import mock
|
|
|
|
from rally.common import broker
|
|
from tests.unit import test
|
|
|
|
|
|
class BrokerTestCase(test.TestCase):
|
|
|
|
def test__publisher(self):
|
|
mock_publish = mock.MagicMock()
|
|
mock_is_published = mock.MagicMock()
|
|
queue = collections.deque()
|
|
broker._publisher(mock_publish, queue, mock_is_published)
|
|
mock_publish.assert_called_once_with(queue)
|
|
mock_is_published.set.assert_called_once_with()
|
|
|
|
def test__publisher_fails(self):
|
|
mock_publish = mock.MagicMock(side_effect=Exception())
|
|
mock_is_published = mock.MagicMock()
|
|
queue = collections.deque()
|
|
broker._publisher(mock_publish, queue, mock_is_published)
|
|
mock_is_published.set.assert_called_once_with()
|
|
|
|
def test__consumer(self):
|
|
queue = collections.deque([1, 2, 3])
|
|
mock_consume = mock.MagicMock()
|
|
mock_is_published = mock.MagicMock()
|
|
mock_is_published.isSet = mock.MagicMock(return_value=True)
|
|
broker._consumer(mock_consume, queue, mock_is_published)
|
|
self.assertEqual(3, mock_consume.call_count)
|
|
self.assertEqual(0, len(queue))
|
|
|
|
def test__consumer_cache(self):
|
|
cache_keys_history = []
|
|
|
|
def consume(cache, item):
|
|
cache[item] = True
|
|
cache_keys_history.append(list(cache))
|
|
|
|
queue = collections.deque([1, 2, 3])
|
|
mock_is_published = mock.MagicMock()
|
|
mock_is_published.isSet = mock.MagicMock(return_value=True)
|
|
broker._consumer(consume, queue, mock_is_published)
|
|
self.assertEqual([[1], [1, 2], [1, 2, 3]], cache_keys_history)
|
|
|
|
def test__consumer_fails(self):
|
|
queue = collections.deque([1, 2, 3])
|
|
mock_consume = mock.MagicMock(side_effect=Exception())
|
|
mock_is_published = mock.MagicMock()
|
|
mock_is_published.isSet = mock.MagicMock(return_value=True)
|
|
broker._consumer(mock_consume, queue, mock_is_published)
|
|
self.assertEqual(0, len(queue))
|
|
|
|
def test_run(self):
|
|
|
|
def publish(queue):
|
|
queue.append(1)
|
|
queue.append(2)
|
|
queue.append(3)
|
|
|
|
consumed = set()
|
|
|
|
def consume(cache, item):
|
|
consumed.add(item)
|
|
|
|
consumer_count = 2
|
|
broker.run(publish, consume, consumer_count)
|
|
self.assertEqual(set([1, 2, 3]), consumed)
|