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

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 

10 

11# pylint: disable=broad-exception-caught 

12 

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) 

30 

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]) 

40 

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} 

44 

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) 

51 

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()) 

60 

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())