Files
opensearch-pyd/test_opensearchpy/test_server/test_metrics.py
T
Hugo van Kemenade 6e3f1a1194 Remove redundant mock backport dependency and upgrade syntax for Python 3.8+ (#785)
* Upgrade syntax with pyupgrade --py38-plus

Signed-off-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>

* Convert to f-strings with flynt

Signed-off-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>

* Format with Black

Signed-off-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>

* Remove redundant mock backport dependency

Signed-off-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>

* isort imports

Signed-off-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>

* Add changelog entry

Signed-off-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>

---------

Signed-off-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
2024-07-20 16:19:20 -04:00

117 lines
4.6 KiB
Python

# SPDX-License-Identifier: Apache-2.0
#
# The OpenSearch Contributors require contributions made to
# this file be licensed under the Apache-2.0 license or a
# compatible open source license.
#
# Modifications Copyright OpenSearch Contributors. See
# GitHub history for details.
import time
import pytest
from opensearchpy import RequestsHttpConnection
from opensearchpy.metrics.metrics_events import MetricsEvents
from opensearchpy.metrics.metrics_none import MetricsNone
from . import OpenSearchTestCase, get_client
class TestMetrics(OpenSearchTestCase):
def tearDown(self) -> None:
client = get_client()
client.indices.delete(index=["test-index"], ignore_unavailable=True)
def test_metrics_default_behavior(self) -> None:
# Test default behavior when metrics is not passed to the client
client = get_client()
index_name = "test-index"
index_body = {"settings": {"index": {"number_of_shards": 4}}}
try:
client.indices.create(index=index_name, body=index_body)
except Exception as e:
assert False, f"Error creating index: {e}"
def test_metrics_raises_error_when_value_is_none(self) -> None:
# Test behavior when metrics is given None.
metrics = None
with pytest.raises(AttributeError):
get_client(metrics=metrics)
def test_metrics_none_behavior(self) -> None:
# Test behavior when metrics is an instance of MetricsNone
metrics = MetricsNone()
client = get_client(metrics=metrics)
index_name = "test-index"
index_body = {"settings": {"index": {"number_of_shards": 4}}}
client.indices.create(index=index_name, body=index_body)
assert metrics.service_time is None
class TestMetricsEvents(OpenSearchTestCase):
def tearDown(self) -> None:
client = get_client()
client.indices.delete(index=["test-index"], ignore_unavailable=True)
def test_metrics_events_with_urllib3_connection(self) -> None:
# Test MetricsEvents behavior with urllib3 connection
metrics = MetricsEvents()
client = get_client(metrics=metrics)
# Calculate service time for create index operation
index_name = "test-index"
index_body = {"settings": {"index": {"number_of_shards": 4}}}
start1 = time.perf_counter()
client.indices.create(index=index_name, body=index_body)
duration1 = time.perf_counter() - start1
create_index_service_time = metrics.service_time
assert (
isinstance(create_index_service_time, float)
and create_index_service_time < duration1
)
# Calculate service time for adding document operation
document = {"title": "Moneyball", "director": "Bennett Miller", "year": "2011"}
id = "1"
start2 = time.perf_counter()
client.index(index=index_name, body=document, id=id, refresh=True)
duration2 = time.perf_counter() - start2
assert (
isinstance(metrics.service_time, float)
and metrics.service_time < duration2
and metrics.service_time != create_index_service_time
# Above check is to confirm service time differs from the previous API call.
)
def test_metrics_events_with_requests_http_connection(self) -> None:
# Test MetricsEvents behavior with requests HTTP connection
metrics = MetricsEvents()
client = get_client(metrics=metrics, connection_class=RequestsHttpConnection)
# Calculate service time for create index operation
index_name = "test-index"
index_body = {"settings": {"index": {"number_of_shards": 4}}}
start1 = time.perf_counter()
client.indices.create(index_name, body=index_body)
duration1 = time.perf_counter() - start1
create_index_service_time = metrics.service_time
assert (
isinstance(create_index_service_time, float)
and create_index_service_time < duration1
)
# Calculate service time for adding document operation
document = {"title": "Moneyball", "director": "Bennett Miller", "year": "2011"}
id = "1"
start2 = time.perf_counter()
client.index(index=index_name, body=document, id=id, refresh=True)
duration2 = time.perf_counter() - start2
assert (
isinstance(metrics.service_time, float)
and metrics.service_time < duration2
and metrics.service_time != create_index_service_time
# Above check is to confirm service time differs from the previous API call.
)