From 45616bd862dc43cf826204b1006ac1b3e761a34c Mon Sep 17 00:00:00 2001 From: "P. Sai Vinay" <33659563+V1NAY8@users.noreply.github.com> Date: Thu, 15 Jul 2021 01:28:27 +0530 Subject: [PATCH] [7.x] Add support for transform_and_set REST API test instruction --- .../test_server/test_rest_api_spec.py | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/test_elasticsearch/test_server/test_rest_api_spec.py b/test_elasticsearch/test_server/test_rest_api_spec.py index aa7122f0..8de80022 100644 --- a/test_elasticsearch/test_server/test_rest_api_spec.py +++ b/test_elasticsearch/test_server/test_rest_api_spec.py @@ -33,6 +33,7 @@ import urllib3 import yaml from elasticsearch import ElasticsearchWarning, RequestError, TransportError +from elasticsearch.client.utils import _base64_auth_header from elasticsearch.compat import string_types from elasticsearch.helpers.test import _get_version @@ -56,6 +57,7 @@ IMPLEMENTED_FEATURES = { "allowed_warnings", "contains", "arbitrary_key", + "transform_and_set", } # broken YAML tests on some releases @@ -336,12 +338,27 @@ class YamlRunner: if expected not in value: raise AssertionError("%s is not contained by %s" % (expected, value)) + def run_transform_and_set(self, action): + for key, value in action.items(): + # Convert #base64EncodeCredentials(id,api_key) to ["id", "api_key"] + if "#base64EncodeCredentials" in value: + value = value.replace("#base64EncodeCredentials", "") + value = value.replace("(", "").replace(")", "").split(",") + self._state[key] = _base64_auth_header( + (self._lookup(value[0]), self._lookup(value[1])) + ) + def _resolve(self, value): # resolve variables - if isinstance(value, string_types) and value.startswith("$"): - value = value[1:] - assert value in self._state - value = self._state[value] + if isinstance(value, string_types) and "$" in value: + for k, v in self._state.items(): + key_construct = "${" + k + "}" + if key_construct in value: + value = value.replace(key_construct, v) + key_construct = "$" + k + if key_construct in value: + value = value.replace(key_construct, v) + if isinstance(value, string_types): value = value.strip() elif isinstance(value, dict): @@ -455,7 +472,7 @@ try: elif test_name == "teardown": teardown_steps = test_step else: - test_numbers_and_steps.append((test_number, yaml_test)) + test_numbers_and_steps.append((test_number, test_step)) test_number += 1 # Now we combine setup, teardown, and test_steps into