utf-queue-client 1.16.0__tar.gz → 1.17.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/PKG-INFO +1 -1
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/setup.py +1 -1
- utf-queue-client-1.17.0/test/test_rail_data_producer_tests.py +64 -0
- utf-queue-client-1.17.0/utf_queue_client/clients/test_rail_data_producer.py +95 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client.egg-info/PKG-INFO +1 -1
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client.egg-info/SOURCES.txt +2 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/README.md +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/setup.cfg +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_amqp_connections.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_async_consumer.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_connection_retry.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_data_lake_data_producer.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_http_producer.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_legacy_base_model.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_models.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_opentelemetry_data_producer.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_publish_release_info.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_publish_test_results.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_sqa_test_result_producer.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_ubai_copy.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_ubai_search.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_ubai_update_retention.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_ubai_upload.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_utils.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/__init__.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/clients/__init__.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/clients/async_consumer.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/clients/base_producer.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/clients/data_lake_data_producer.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/clients/http_producer.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/clients/opentelemetry_data_producer.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/clients/sqa_test_result_producer.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/clients/ubai_artifact_upload_request_producer.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/exceptions/__init__.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/models/__init__.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/models/base_model.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/models/model_factory.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/models/schemas/__init__.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/scripts/__init__.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/scripts/publish_release_info_cli.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/scripts/publish_test_results_cli.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/scripts/ubai_copy_cli.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/scripts/ubai_search_cli.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/scripts/ubai_update_retention_cli.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/scripts/ubai_upload_cli.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/utils/__init__.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/utils/queue_metrics_exporter.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/utils/queue_span_exporter.py +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client.egg-info/dependency_links.txt +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client.egg-info/entry_points.txt +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client.egg-info/requires.txt +0 -0
- {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
from unittest.mock import MagicMock
|
|
2
|
+
|
|
3
|
+
from utf_queue_client.clients.test_rail_data_producer import (
|
|
4
|
+
TestRailDataProducer,
|
|
5
|
+
TestRailDataProducerFactory,
|
|
6
|
+
DummyTestRailDataProducer,
|
|
7
|
+
LocalTestRailDataProducer,
|
|
8
|
+
)
|
|
9
|
+
import pytest
|
|
10
|
+
import os
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def test_result_producer_empty_url():
|
|
14
|
+
with pytest.raises(RuntimeError):
|
|
15
|
+
_ = TestRailDataProducer()
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@pytest.mark.parametrize("queue_consumer", [60, 120], indirect=True)
|
|
19
|
+
def test_result_producer_central_queue(
|
|
20
|
+
request,
|
|
21
|
+
test_rail_add_test_result,
|
|
22
|
+
amqp_url,
|
|
23
|
+
queue_consumer,
|
|
24
|
+
):
|
|
25
|
+
os.environ["UTF_PRODUCER_APP_ID"] = request.node.name
|
|
26
|
+
producer = TestRailDataProducerFactory.create_producer()
|
|
27
|
+
producer.publish_add_test_result(test_rail_add_test_result)
|
|
28
|
+
queue_consumer.expect_messages(1)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def test_dummy_producer(test_rail_add_test_result):
|
|
32
|
+
producer = DummyTestRailDataProducer()
|
|
33
|
+
producer.publish_add_test_result(test_rail_add_test_result)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def test_local_test_rail_producer(test_rail_add_test_result, mocker):
|
|
37
|
+
mocker.patch(
|
|
38
|
+
"utf_queue_client.clients.base_producer.BlockingProducer.__init__",
|
|
39
|
+
return_value=None,
|
|
40
|
+
)
|
|
41
|
+
mocker.patch(
|
|
42
|
+
"utf_queue_client.clients.base_producer.BlockingProducer.queue_declare"
|
|
43
|
+
)
|
|
44
|
+
mock_producer_publish = mocker.patch(
|
|
45
|
+
"utf_queue_client.clients.base_producer.BlockingProducer.publish"
|
|
46
|
+
)
|
|
47
|
+
producer = LocalTestRailDataProducer()
|
|
48
|
+
producer.producer_app_id = "DUMMY"
|
|
49
|
+
producer.publish_add_test_result(test_rail_add_test_result)
|
|
50
|
+
assert mock_producer_publish.called
|
|
51
|
+
kwargs = mock_producer_publish.call_args.kwargs
|
|
52
|
+
payload = kwargs.get("payload")
|
|
53
|
+
assert payload.get("recordType") == "TEST_RAIL_EVENT"
|
|
54
|
+
assert payload.get("recordSubType") == "TEST_RESULT"
|
|
55
|
+
assert payload.get("tenantKey") == "DUMMY"
|
|
56
|
+
payload_data = payload.get("payload")
|
|
57
|
+
assert payload_data.get("version") == "v1"
|
|
58
|
+
assert payload_data.get("comment") == "testing"
|
|
59
|
+
assert payload_data.get("status") == "pass"
|
|
60
|
+
assert payload_data.get("run_id") == 1234
|
|
61
|
+
assert payload_data.get("id") == "C123"
|
|
62
|
+
custom_props = payload_data.get("custom_props")
|
|
63
|
+
assert custom_props.get("custom_interface_type") == "gcc"
|
|
64
|
+
assert custom_props.get("custom_evk_version") == "v2"
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from .base_producer import BlockingProducer as AMQPBlockingProducer, ConnectionError
|
|
3
|
+
from .http_producer import CompositeHTTPProducer
|
|
4
|
+
from ..models import TestRailResult
|
|
5
|
+
from ..models import QueueMessage
|
|
6
|
+
from . import Loggable
|
|
7
|
+
from socket import gethostname
|
|
8
|
+
from datetime import datetime
|
|
9
|
+
from abc import ABC, abstractmethod
|
|
10
|
+
from otel_extensions import instrumented
|
|
11
|
+
from typing import Optional
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
__all__ = [
|
|
15
|
+
"TestRailDataProducer",
|
|
16
|
+
"DummyTestRailDataProducer",
|
|
17
|
+
"ConnectionError",
|
|
18
|
+
"TestRailDataProducerFactory",
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class BaseTestRailDataProducer(ABC):
|
|
23
|
+
@abstractmethod
|
|
24
|
+
def publish_add_test_result(self, test_result: TestRailResult):
|
|
25
|
+
"""publish a test result object"""
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class TestRailDataProducer(BaseTestRailDataProducer):
|
|
29
|
+
RECORD_TYPE = "TEST_RAIL_EVENT"
|
|
30
|
+
|
|
31
|
+
def __init__(
|
|
32
|
+
self,
|
|
33
|
+
url=None,
|
|
34
|
+
producer_app_id: str = None,
|
|
35
|
+
producer_class: Optional[type] = None,
|
|
36
|
+
):
|
|
37
|
+
if producer_class is None:
|
|
38
|
+
producer_class = AMQPBlockingProducer
|
|
39
|
+
self.queue_name = "default"
|
|
40
|
+
self.__producer_client = producer_class(url, producer_app_id)
|
|
41
|
+
self.__producer_client.queue_declare(queue=self.queue_name, durable=True)
|
|
42
|
+
self.producer_app_id = producer_app_id
|
|
43
|
+
|
|
44
|
+
@instrumented
|
|
45
|
+
def publish_add_test_result(self, test_result: TestRailResult):
|
|
46
|
+
queue_message = QueueMessage(
|
|
47
|
+
payload=test_result,
|
|
48
|
+
recordType=self.RECORD_TYPE,
|
|
49
|
+
recordSubType="TEST_RESULT",
|
|
50
|
+
tenantKey=self.producer_app_id,
|
|
51
|
+
recordTimestamp=datetime.now().isoformat(),
|
|
52
|
+
)
|
|
53
|
+
queue_message.validate_schema()
|
|
54
|
+
self.__producer_client.publish(
|
|
55
|
+
exchange="",
|
|
56
|
+
routing_key=self.queue_name,
|
|
57
|
+
payload=queue_message.as_dict(),
|
|
58
|
+
persistent=True,
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class LocalTestRailDataProducer(TestRailDataProducer):
|
|
63
|
+
def __init__(self):
|
|
64
|
+
super().__init__(
|
|
65
|
+
"amqp://guest:guest@localhost:5672/%2f",
|
|
66
|
+
os.environ.get(
|
|
67
|
+
"UTF_PRODUCER_APP_ID", f"LocalTestRailDataProducer at {gethostname()}"
|
|
68
|
+
),
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class DummyTestRailDataProducer(BaseTestRailDataProducer):
|
|
73
|
+
def publish_add_test_result(self, test_result: TestRailResult):
|
|
74
|
+
# noqa
|
|
75
|
+
pass
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class TestRailDataProducerFactory(Loggable):
|
|
79
|
+
@classmethod
|
|
80
|
+
def create_producer(cls, raise_on_connection_error=False):
|
|
81
|
+
try:
|
|
82
|
+
queue_server_url = os.environ.get("UTF_QUEUE_SERVER_URL")
|
|
83
|
+
if queue_server_url is not None:
|
|
84
|
+
return TestRailDataProducer(
|
|
85
|
+
url=queue_server_url,
|
|
86
|
+
producer_app_id=os.environ.get("UTF_PRODUCER_APP_ID"),
|
|
87
|
+
producer_class=CompositeHTTPProducer,
|
|
88
|
+
)
|
|
89
|
+
else:
|
|
90
|
+
return LocalTestRailDataProducer()
|
|
91
|
+
except ConnectionError as e:
|
|
92
|
+
cls.logger.warning(f"Unable to connect to queue server: {repr(e)}")
|
|
93
|
+
if raise_on_connection_error:
|
|
94
|
+
raise
|
|
95
|
+
return DummyTestRailDataProducer()
|
|
@@ -11,6 +11,7 @@ test/test_models.py
|
|
|
11
11
|
test/test_opentelemetry_data_producer.py
|
|
12
12
|
test/test_publish_release_info.py
|
|
13
13
|
test/test_publish_test_results.py
|
|
14
|
+
test/test_rail_data_producer_tests.py
|
|
14
15
|
test/test_sqa_test_result_producer.py
|
|
15
16
|
test/test_ubai_copy.py
|
|
16
17
|
test/test_ubai_search.py
|
|
@@ -31,6 +32,7 @@ utf_queue_client/clients/data_lake_data_producer.py
|
|
|
31
32
|
utf_queue_client/clients/http_producer.py
|
|
32
33
|
utf_queue_client/clients/opentelemetry_data_producer.py
|
|
33
34
|
utf_queue_client/clients/sqa_test_result_producer.py
|
|
35
|
+
utf_queue_client/clients/test_rail_data_producer.py
|
|
34
36
|
utf_queue_client/clients/ubai_artifact_upload_request_producer.py
|
|
35
37
|
utf_queue_client/exceptions/__init__.py
|
|
36
38
|
utf_queue_client/models/__init__.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_opentelemetry_data_producer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/clients/async_consumer.py
RENAMED
|
File without changes
|
{utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/clients/base_producer.py
RENAMED
|
File without changes
|
|
File without changes
|
{utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/clients/http_producer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/models/model_factory.py
RENAMED
|
File without changes
|
{utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/models/schemas/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/scripts/ubai_copy_cli.py
RENAMED
|
File without changes
|
{utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/scripts/ubai_search_cli.py
RENAMED
|
File without changes
|
|
File without changes
|
{utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/scripts/ubai_upload_cli.py
RENAMED
|
File without changes
|
|
File without changes
|
{utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/utils/queue_metrics_exporter.py
RENAMED
|
File without changes
|
{utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/utils/queue_span_exporter.py
RENAMED
|
File without changes
|
{utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|