Coverage for /Users/buh/.pyenv/versions/3.12.2/envs/es-testbed/lib/python3.12/site-packages/es_testbed/classes/base.py: 65%
46 statements
« prev ^ index » next coverage.py v7.4.4, created at 2024-04-25 19:21 -0600
« prev ^ index » next coverage.py v7.4.4, created at 2024-04-25 19:21 -0600
1"""Base TestBed Class"""
2import typing as t
3from datetime import datetime, timezone
4from dotmap import DotMap
5from elasticsearch8 import Elasticsearch
6from es_testbed.helpers.es_api import delete
7from es_testbed.helpers.utils import getlogger
8from .plan import PlanBuilder
9from .tracker import Tracker
11# pylint: disable=broad-exception-caught
13class TestBed:
14 """Base TestBed Class"""
15 __test__ = False
16 def __init__(
17 self,
18 client: Elasticsearch = None,
19 plan: DotMap = None,
20 autobuild: t.Optional[bool] = False,
21 ):
22 """Initialize"""
23 self.logger = getlogger('es_testbed.TestBed')
24 self.client = client
25 if plan is None: 25 ↛ 26line 25 didn't jump to line 26, because the condition on line 25 was never true
26 plan = PlanBuilder() # Use defaults
27 self.plan = plan
28 self.tracker = Tracker(
29 client=client, plan=plan, autobuild=autobuild)
31 def failsafe_teardown(self):
32 """Fallback method to delete things still remaining"""
33 items = ['index', 'data_stream', 'snapshot', 'template', 'component', 'ilm']
34 for i in items:
35 if i == 'snapshot':
36 snaps = ','.join(self.plan.failsafes[i])
37 self.client.snapshot.delete(snapshot=snaps, repository=self.plan.repository)
38 else:
39 self._loop_teardown(i, self.plan.failsafes[i])
41 def ilm_polling(self, interval: t.Union[str, None] = None):
42 """Return persistent cluster settings to speed up ILM polling during testing"""
43 return {'indices.lifecycle.poll_interval': interval}
45 def _loop_teardown(self, kind: str, lst: t.Sequence[str]) -> None:
46 for item in lst:
47 try:
48 delete(self.client, kind, item)
49 except Exception as err:
50 self.logger.error('Tried deleting %s via %s. Error: %s', kind, item, err)
52 def setup(self):
53 """Setup the instance"""
54 start = datetime.now(timezone.utc)
55 self.logger.info('Setting: %s', self.ilm_polling(interval='1s'))
56 self.client.cluster.put_settings(persistent=self.ilm_polling(interval='1s'))
57 self.tracker.setup()
58 end = datetime.now(timezone.utc)
59 self.logger.info('Testbed setup elapsed time: %s', (end - start).total_seconds())
61 def teardown(self):
62 """Tear down anything we created"""
63 start = datetime.now(timezone.utc)
64 self.tracker.teardown()
65 # Do we clean up the failsafes in the plan?
66 self.logger.info('Restoring ILM polling to default: %s', self.ilm_polling(interval=None))
67 self.client.cluster.put_settings(persistent=self.ilm_polling(interval=None))
68 end = datetime.now(timezone.utc)
69 self.logger.info('Testbed teardown elapsed time: %s', (end - start).total_seconds())