Coverage for /Users/buh/.pyenv/versions/3.12.2/envs/es-testbed/lib/python3.12/site-packages/es_testbed/presets/searchable_test/scenarios.py: 100%
60 statements
« prev ^ index » next coverage.py v7.4.4, created at 2024-08-30 19:06 -0600
« prev ^ index » next coverage.py v7.4.4, created at 2024-08-30 19:06 -0600
1"""
2Searchable Snapshot Test Scenarios
4The repository should be configurable at runtime, so we make it use the TEST_ES_REPO
5env var.
6"""
8from os import environ
9import typing as t
10import logging
12logger = logging.getLogger(__name__)
14REPOSITORY = environ.get('TEST_ES_REPO', 'found-snapshots')
16# default values = {
17# 'type': 'indices',
18# 'rollover_alias': False,
19# 'repository': REPOSITORY,
20# 'ilm': {
21# 'enabled': False,
22# 'phases': ['hot', 'delete'],
23# 'readonly': None,
24# 'max_num_segments': 1,
25# 'forcemerge': False,
26# },
27# }
30class Scenarios:
31 """Scenarios Class"""
33 def __init__(self):
34 """Initialize the scenarios for this preset"""
36 # #####################
37 # ### Hot Scenarios ###
38 # #####################
40 @property
41 def hot(self):
42 """Basic hot scenario"""
43 return self.scenario_builder('hot', 'basic')
45 @property
46 def hot_rollover(self):
47 """Hot rollover index scenario"""
48 return self.scenario_builder('hot', 'rollover')
50 @property
51 def hot_ds(self):
52 """Hot data_stream scenario"""
53 return self.scenario_builder('hot', 'data_stream')
55 # ######################
56 # ### Cold Scenarios ###
57 # ######################
59 @property
60 def cold(self):
61 """Basic cold scenario"""
62 return self.scenario_builder('cold', 'basic')
64 @property
65 def cold_rollover(self):
66 """Cold rollover index scenario"""
67 return self.scenario_builder('cold', 'rollover')
69 @property
70 def cold_ilm(self):
71 """Cold ilm index scenario"""
72 return self.scenario_builder('cold', 'ilm')
74 @property
75 def cold_ds(self):
76 """Cold data_stream scenario"""
77 return self.scenario_builder('cold', 'data_stream')
79 # ########################
80 # ### Frozen Scenarios ###
81 # ########################
83 @property
84 def frozen(self):
85 """Basic frozen scenario"""
86 return self.scenario_builder('frozen', 'basic')
88 @property
89 def frozen_rollover(self):
90 """Frozen rollover index scenario"""
91 return self.scenario_builder('frozen', 'rollover')
93 @property
94 def frozen_ilm(self):
95 """Frozen ilm index scenario"""
96 return self.scenario_builder('frozen', 'ilm')
98 @property
99 def frozen_ds(self):
100 """Frozen data_stream scenario"""
101 return self.scenario_builder('frozen', 'data_stream')
103 def build_list(self) -> t.Sequence[t.Dict]:
104 """The plan build list for these scenarios"""
105 return [
106 {
107 'options': {
108 'count': 10,
109 'start_at': 0,
110 'match': True,
111 },
112 'target_tier': 'frozen',
113 },
114 {
115 'options': {
116 'count': 10,
117 'start_at': 10,
118 'match': True,
119 },
120 'target_tier': 'frozen',
121 },
122 {
123 'options': {
124 'count': 10,
125 'start_at': 20,
126 'match': True,
127 },
128 'target_tier': 'hot',
129 },
130 ]
132 def define_ilm(
133 self,
134 phase: t.Literal['hot', 'warm', 'cold', 'frozen'],
135 subtype: t.Literal['basic', 'rollover', 'ilm', 'data_stream'],
136 ) -> t.Union[t.Dict, bool]:
137 """Return ILM based on subtype"""
138 retval = {'enabled': False, 'phases': ['hot', 'delete']}
139 if phase in ['cold', 'frozen']:
140 retval['phases'].append(phase)
141 if subtype in ['ilm', 'data_stream']:
142 retval['enabled'] = True
143 return retval
145 def scenario_builder(
146 self,
147 phase: t.Literal['hot', 'warm', 'cold', 'frozen'] = 'hot',
148 subtype: t.Literal['basic', 'rollover', 'ilm', 'data_stream'] = 'basic',
149 ) -> t.Dict:
150 """Build a scenario"""
151 retval = {
152 'repository': REPOSITORY,
153 'index_buildlist': self.build_list(),
154 'ilm': {'enabled': False, 'phases': ['hot', 'delete']},
155 }
156 for idx in range(0, len(retval['index_buildlist'])):
157 # By default, make everything have the phase as the target_tier
158 retval['index_buildlist'][idx]['target_tier'] = phase
159 if subtype != 'basic':
160 # The last entry should always be hot in rollover, ilm, and data_stream
161 retval['index_buildlist'][-1]['target_tier'] = 'hot'
162 if subtype in ['rollover', 'ilm']:
163 retval['rollover_alias'] = True
164 retval['ilm'] = self.define_ilm(phase, subtype)
165 retval['type'] = 'data_stream' if subtype == 'data_stream' else 'indices'
166 return retval