deb-sahara/sahara/tests/unit/utils/test_poll_utils.py
Li, Chen e1f5bcf08c Add CLUSTER_STATUS
We should define a set of CLUSTER_STATUS in stead of using direct string
in code.

1. Add cluster.py in utils/
2. Add cluster status.
3. move cluster operation related methods from general.py to cluster.py

Change-Id: Id95d982a911ab5d0f789265e03bff2256cf75856
2015-08-03 09:12:36 +08:00

134 lines
5.2 KiB
Python

# Copyright (c) 2015 Mirantis 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 mock
import six
import testtools
from sahara import context
from sahara.tests.unit import base
from sahara.utils import poll_utils
class FakeCluster(object):
def __init__(self, cluster_configs):
self.cluster_configs = cluster_configs
class FakeOption(object):
def __init__(self, default_value, section, name):
self.default_value = default_value
self.name = name
self.applicable_target = section
class TestPollUtils(base.SaharaTestCase):
def setUp(self):
super(TestPollUtils, self).setUp()
context.sleep = mock.Mock()
@mock.patch('sahara.utils.poll_utils.LOG.debug')
def test_poll_success(self, logger):
poll_utils.poll(**{'get_status': lambda: True,
'kwargs': {}, 'timeout': 5, 'sleep': 3})
expected_call = mock.call(
'Operation was executed successfully in timeout 5')
self.assertEqual(1, logger.call_count)
self.assertEqual([expected_call], logger.call_args_list)
@mock.patch('sahara.utils.poll_utils._get_consumed')
def test_poll_failed_first_scenario(self, get_consumed):
get_consumed.return_value = 0
message = ""
try:
poll_utils.poll(
**{'get_status': lambda: False, 'kwargs': {},
'timeout': 0, 'sleep': 3})
except Exception as e:
message = six.text_type(e)
if message.find('Error ID') != -1:
message = message.split("\n")[0]
expected_message = "'Operation' timed out after 0 second(s)"
self.assertEqual(expected_message, message)
@mock.patch('sahara.utils.poll_utils._get_consumed')
def test_poll_failed_second_scenario(self, get_consumed):
get_consumed.return_value = 0
message = ""
try:
poll_utils.poll(
**{'get_status': lambda: False, 'kwargs': {},
'timeout': 0, 'sleep': 3, 'timeout_name': "some timeout"})
except Exception as e:
message = six.text_type(e)
if message.find('Error ID') != -1:
message = message.split("\n")[0]
expected_message = ("'Operation' timed out after 0 second(s) and "
"following timeout was violated: some timeout")
self.assertEqual(expected_message, message)
@mock.patch('sahara.utils.poll_utils.LOG.debug')
@mock.patch('sahara.utils.cluster.check_cluster_exists')
def test_plugin_poll_first_scenario(self, cluster_exists, logger):
cluster_exists.return_value = True
fake_get_status = mock.Mock()
fake_get_status.side_effect = [False, False, True]
fake_kwargs = {'kwargs': {'cat': 'tom', 'bond': 'james bond'}}
poll_utils.plugin_option_poll(
FakeCluster({}), fake_get_status, FakeOption(5, 'target', 'name'),
'fake_operation', 5, **fake_kwargs)
expected_call = mock.call('Operation with name fake_operation was '
'executed successfully in timeout 5')
self.assertEqual([expected_call], logger.call_args_list)
@mock.patch('sahara.utils.poll_utils.LOG.debug')
@mock.patch('sahara.utils.cluster.check_cluster_exists')
def test_plugin_poll_second_scenario(self, cluster_exists, logger):
cluster_exists.return_value = False
fake_get_status = mock.Mock()
fake_get_status.side_effect = [False, False, True]
fake_kwargs = {'kwargs': {'cat': 'tom', 'bond': 'james bond'}}
poll_utils.plugin_option_poll(
FakeCluster({'target': {'name': 7}}), fake_get_status,
FakeOption(5, 'target', 'name'),
'fake_operation', 5, **fake_kwargs)
expected_call = mock.call('Operation with name fake_operation was '
'executed successfully in timeout 7')
self.assertEqual([expected_call], logger.call_args_list)
def test_poll_exception_strategy_first_scenario(self):
fake_get_status = mock.Mock()
fake_get_status.side_effect = [False, ValueError()]
with testtools.ExpectedException(ValueError):
poll_utils.poll(fake_get_status)
def test_poll_exception_strategy_second_scenario(self):
fake_get_status = mock.Mock()
fake_get_status.side_effect = [False, ValueError()]
poll_utils.poll(fake_get_status, exception_strategy='mark_as_true')
self.assertEqual(2, fake_get_status.call_count)
def test_poll_exception_strategy_third_scenario(self):
fake_get_status = mock.Mock()
fake_get_status.side_effect = [False, ValueError(), True]
poll_utils.poll(fake_get_status, exception_strategy='mark_as_false')
self.assertEqual(3, fake_get_status.call_count)