Skip to main content

Library to help with building and tearing down indices, data streams, repositories and snapshots

Project description

es-testbed

A way to create indices, datastreams, and snapshots to facilitate testing.

Preliminary Documentation

1. Create a Preset

Create a preset directory. An example preset directory is in src/es_testbed/presets/searchable_test.

Your preset directory must include the following files:

  • A plan YAML file, e.g. plan.yml
  • A buildlist YAML file, e.g. buildlist.yml
  • A functions.py file (the actual python code), which must contain a function named doc_generator(). This function must accept all kwargs from the buildlist's options
  • A definitions.py file, which is a Python variable file that helps find the path to the module, etc., as well as import the plan, the buildlist, the mappings and settings, etc. This must at least include a get_plan() function that returns a dictionary of a built/configured plan.
  • A mappings.json file (contains the index mappings your docs need)
  • A settings.json file (contains the index settings) Any other files can be included to help your doc_generator function, e.g. Faker definitions and classes, etc. Once the preset module is imported, relative imports should work.

Note: If ilm['enabled'] == False, the other subkeys will be ignored. In fact, ilm: False is also acceptable.

Acceptable values for readonly are the tier names where readonly is acceptable: hot, warm, or cold.

Save this for step 2.

2. Create a TestBed

Must have an Elasticsearch client established to proceed

from es_testbed import TestBed

tb = TestBed(client, **kwargs)

For a builtin preset, like searchable_test, this is:

tb = TestBed(client, builtin='searchable_test', scenario=None)

scenario can be one of many, if configured.

For using your own preset in a filesystem path:

tb = TestBed(client, path='/path/to/preset/dir')

path must be a directory.

For importing from a Git repository:

tb = TestBed(client, url='user:token@https://github.com/GITUSER/reponame.git', ref='main', path='subpath/to/preset')

Note that user:token@ is only necessary if it's a protected repository. In this case path must be a subdirectory of the repository. depth=1 is manually set, so only the most recent bits will be pulled into a tmpdir, which will be destroyed as part of teardown().

2.1 Index Template creation (behind the scenes)

Based on the settings in step 1, you will have 2 component templates and one index template that references them:

Component Template 1

es-testbed-cmp-mytest-000001

Settings:

{'index.number_of_replicas': 0}

If using a rollover_alias or ILM Policy, then additional values will automatically be added.

Component Template 2

es-testbed-cmp-mytest-000002

Mappings:

{
    'properties': {
        '@timestamp': {'type': 'date'},
        'message': {'type': 'keyword'},
        'number': {'type': 'long'},
        'nested': {'properties': {'key': {'type': 'keyword'}}},
        'deep': {'properties': {'l1': {'properties': {'l2': {
            'properties': {'l3': {'type': 'keyword'}}}}}}
        }
    }
}

Index Template

es-testbed-tmpl-mytest-000001

2.2 You have indices

Based on what was provided in step 1, you will have 3 indices with a basic mapping, and 10 documents each:

es-testbed-idx-mytest-000001
es-testbed-idx-mytest-000002
es-testbed-idx-mytest-000003

Documents will have been added per the TestPlan settings. The orthography for these documents is in es_testbed.helpers.utils.doc_gen(). Counts are preserved and continue to grow from one index to the next.

3. Perform your tests.

This is where the testing can be performed.

4. Teardown

tb.teardown()

Barring anything unusual happening, all indices, data_streams, ILM policies, index & component templates, and snapshots (if an index is promoted to searchable snapshots) will be deleted as part of the teardown() method.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

es_testbed-0.11.0.tar.gz (155.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

es_testbed-0.11.0-py3-none-any.whl (49.0 kB view details)

Uploaded Python 3

File details

Details for the file es_testbed-0.11.0.tar.gz.

File metadata

  • Download URL: es_testbed-0.11.0.tar.gz
  • Upload date:
  • Size: 155.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for es_testbed-0.11.0.tar.gz
Algorithm Hash digest
SHA256 6e635f17b9ae363c4815b4ce3cdc4a9eef09fda58bc45537f950449854806a0e
MD5 4be71762e61e819eae3b86b943676974
BLAKE2b-256 e42c9384805b40023483307ced52a7edf2bea37936d19bfd5abcfba8a8563401

See more details on using hashes here.

File details

Details for the file es_testbed-0.11.0-py3-none-any.whl.

File metadata

  • Download URL: es_testbed-0.11.0-py3-none-any.whl
  • Upload date:
  • Size: 49.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for es_testbed-0.11.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e643e371840d4ca6bc8f9e5c862fe116ba93ff01a3fe7a27d8bafa4410aaf2de
MD5 2dc29ec3ce6af087c8ae231a884e7c35
BLAKE2b-256 c5b53610e31bcc25e2650448ec8f7a8d9d0e703a32bce9e0cb9ebf9fb2005142

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page