1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
|
"""test_action_reindex"""
# pylint: disable=missing-function-docstring, missing-class-docstring, protected-access, attribute-defined-outside-init
from unittest import TestCase
from unittest.mock import Mock
from curator.actions import Reindex
from curator.exceptions import ConfigurationError, CuratorException, FailedExecution, NoIndices
from curator import IndexList
# Get test variables and constants from a single source
from . import testvars
class TestActionReindex(TestCase):
VERSION = {'version': {'number': '8.0.0'} }
def builder(self):
self.client = Mock()
self.client.info.return_value = self.VERSION
self.client.cat.indices.return_value = testvars.state_four
self.client.indices.get_settings.return_value = testvars.settings_four
self.client.indices.stats.return_value = testvars.stats_four
self.client.indices.exists_alias.return_value = False
self.ilo = IndexList(self.client)
def test_init_bad_ilo(self):
self.assertRaises(TypeError, Reindex, 'foo', 'invalid')
def test_init_raise_bad_request_body(self):
self.builder()
self.assertRaises(ConfigurationError, Reindex, self.ilo, 'invalid')
def test_init_raise_local_migration_no_prefix_or_suffix(self):
self.builder()
self.assertRaises(ConfigurationError, Reindex, self.ilo, testvars.reindex_migration)
def test_init(self):
self.builder()
rio = Reindex(self.ilo, testvars.reindex_basic)
self.assertEqual(self.ilo, rio.index_list)
self.assertEqual(self.client, rio.client)
def test_do_dry_run(self):
self.builder()
rio = Reindex(self.ilo, testvars.reindex_basic)
self.assertIsNone(rio.do_dry_run())
def test_replace_index_list(self):
self.builder()
rio = Reindex(self.ilo, testvars.reindex_replace)
self.assertEqual(rio.index_list.indices, rio.body['source']['index'])
def test_reindex_with_wait(self):
self.builder()
self.client.reindex.return_value = testvars.generic_task
self.client.tasks.get.return_value = testvars.completed_task
# After building ilo, we need a different return value
self.client.indices.get_settings.return_value = {'other_index':{}}
rio = Reindex(self.ilo, testvars.reindex_basic)
self.assertIsNone(rio.do_action())
def test_reindex_with_wait_zero_total(self):
self.builder()
self.client.reindex.return_value = testvars.generic_task
self.client.tasks.get.return_value = testvars.completed_task_zero_total
# After building ilo, we need a different return value
self.client.indices.get_settings.return_value = {'other_index':{}}
rio = Reindex(self.ilo, testvars.reindex_basic)
self.assertIsNone(rio.do_action())
def test_reindex_with_wait_zero_total_fail(self):
self.builder()
self.client.reindex.return_value = testvars.generic_task
self.client.tasks.get.side_effect = testvars.fake_fail
# After building ilo, we need a different return value
self.client.indices.get_settings.return_value = {'other_index':{}}
rio = Reindex(self.ilo, testvars.reindex_basic)
self.assertRaises(CuratorException, rio.do_action)
def test_reindex_without_wait(self):
self.builder()
self.client.reindex.return_value = testvars.generic_task
self.client.tasks.get.return_value = testvars.completed_task
rio = Reindex(self.ilo, testvars.reindex_basic,
wait_for_completion=False)
self.assertIsNone(rio.do_action())
def test_reindex_timedout(self):
self.builder()
self.client.reindex.return_value = testvars.generic_task
self.client.tasks.get.return_value = testvars.incomplete_task
rio = Reindex(self.ilo, testvars.reindex_basic,
max_wait=1, wait_interval=1)
self.assertRaises(FailedExecution, rio.do_action)
def test_remote_with_no_host_key(self):
self.builder()
self.client.reindex.return_value = testvars.generic_task
self.client.tasks.get.return_value = testvars.completed_task
# After building ilo, we need a different return value
self.client.indices.get_settings.return_value = {'other_index':{}}
badval = {
'source': {
'index': 'irrelevant',
'remote': {'wrong': 'invalid'}
},
'dest': { 'index': 'other_index' }
}
self.assertRaises(
ConfigurationError, Reindex, self.ilo, badval)
def test_remote_with_bad_host(self):
self.builder()
self.client.reindex.return_value = testvars.generic_task
self.client.tasks.get.return_value = testvars.completed_task
# After building ilo, we need a different return value
self.client.indices.get_settings.return_value = {'other_index':{}}
badval = {
'source': {
'index': 'irrelevant',
'remote': {'host': 'invalid'}
},
'dest': { 'index': 'other_index' }
}
self.assertRaises(
ConfigurationError, Reindex, self.ilo, badval)
def test_remote_with_bad_url(self):
self.builder()
self.client.reindex.return_value = testvars.generic_task
self.client.tasks.get.return_value = testvars.completed_task
# After building ilo, we need a different return value
self.client.indices.get_settings.return_value = {'other_index':{}}
badval = {
'source': {
'index': 'irrelevant',
'remote': {'host': 'asdf://hostname:1234'}
},
'dest': { 'index': 'other_index' }
}
self.assertRaises(
ConfigurationError, Reindex, self.ilo, badval)
def test_remote_with_bad_connection(self):
self.builder()
self.client.reindex.return_value = testvars.generic_task
self.client.tasks.get.return_value = testvars.completed_task
# After building ilo, we need a different return value
self.client.indices.get_settings.return_value = {'other_index':{}}
badval = {
'source': {
'index': 'REINDEX_SELECTION',
'remote': {'host': 'https://example.org:XXXX'}
},
'dest': { 'index': 'other_index' }
}
urllib3 = Mock()
urllib3.util.retry.side_effect = testvars.fake_fail
self.assertRaises(Exception, Reindex, self.ilo, badval)
def test_init_raise_empty_source_list(self):
self.builder()
badval = {
'source': { 'index': [] },
'dest': { 'index': 'other_index' }
}
rio = Reindex(self.ilo, badval)
self.assertRaises(NoIndices, rio.do_action)
|