diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_helpers.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_helpers.py index 020150fe897e..454fe543a5fb 100644 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_helpers.py +++ b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_helpers.py @@ -70,3 +70,11 @@ def _get_authentication_policy(credential): if isinstance(credential, EventGridSharedAccessSignatureCredential): authentication_policy = EventGridSharedAccessSignatureCredentialPolicy(credential=credential, name=constants.EVENTGRID_TOKEN_HEADER) return authentication_policy + +def _is_cloud_event(event): + # type: dict -> bool + required = ('id', 'source', 'specversion', 'type') + try: + return all([_ in event for _ in required]) and event['specversion'] == "1.0" + except TypeError: + return False diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_publisher_client.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_publisher_client.py index 9c90992c69e6..a0e5ff7e62c8 100644 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_publisher_client.py +++ b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_publisher_client.py @@ -13,13 +13,24 @@ if TYPE_CHECKING: # pylint: disable=unused-import,ungrouped-imports - from typing import Any + from typing import Any, Union, Dict, List + SendType = Union[ + CloudEvent, + EventGridEvent, + CustomEvent, + Dict, + List[CloudEvent], + List[EventGridEvent], + List[CustomEvent], + List[Dict] + ] from ._models import CloudEvent, EventGridEvent, CustomEvent -from ._helpers import _get_topic_hostname_only_fqdn, _get_authentication_policy +from ._helpers import _get_topic_hostname_only_fqdn, _get_authentication_policy, _is_cloud_event from ._generated._event_grid_publisher_client import EventGridPublisherClient as EventGridPublisherClientImpl from . import _constants as constants + class EventGridPublisherClient(object): """EventGrid Python Publisher Client. @@ -36,20 +47,25 @@ def __init__(self, topic_hostname, credential, **kwargs): self._topic_hostname = topic_hostname auth_policy = _get_authentication_policy(credential) self._client = EventGridPublisherClientImpl(authentication_policy=auth_policy, **kwargs) - def send(self, events, **kwargs): - # type: (Union[List[CloudEvent], List[EventGridEvent], List[CustomEvent]], Any) -> None + # type: (SendType, Any) -> None """Sends event data to topic hostname specified during client initialization. :param events: A list of CloudEvent/EventGridEvent/CustomEvent to be sent. :type events: Union[List[models.CloudEvent], List[models.EventGridEvent], List[models.CustomEvent]] + :keyword str content_type: The type of content to be used to send the events. + Has default value "application/json; charset=utf-8" for EventGridEvents, with "cloudevents-batch+json" for CloudEvents :rtype: None - raise: :class:`ValueError`, when events do not follow specified SendType. + :raise: :class:`ValueError`, when events do not follow specified SendType. """ + if not isinstance(events, list): + events = [events] - if all(isinstance(e, CloudEvent) for e in events): + if all(isinstance(e, CloudEvent) for e in events) or all(_is_cloud_event(e) for e in events): + kwargs.setdefault("content_type", "application/cloudevents-batch+json; charset=utf-8") self._client.publish_cloud_event_events(self._topic_hostname, events, **kwargs) - elif all(isinstance(e, EventGridEvent) for e in events): + elif all(isinstance(e, EventGridEvent) for e in events) or all(isinstance(e, dict) for e in events): + kwargs.setdefault("content_type", "application/json; charset=utf-8") self._client.publish_events(self._topic_hostname, events, **kwargs) elif all(isinstance(e, CustomEvent) for e in events): serialized_events = [dict(e) for e in events] diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/aio/_publisher_client_async.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/aio/_publisher_client_async.py index 2bc93dd6981f..f4b552b0882e 100644 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/aio/_publisher_client_async.py +++ b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/aio/_publisher_client_async.py @@ -6,18 +6,31 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from typing import Any +from typing import Any, TYPE_CHECKING from azure.core import AsyncPipelineClient from msrest import Deserializer, Serializer -from .._models import CloudEvent, EventGridEvent -from .._helpers import _get_topic_hostname_only_fqdn, _get_authentication_policy +from .._models import CloudEvent, EventGridEvent, CustomEvent +from .._helpers import _get_topic_hostname_only_fqdn, _get_authentication_policy, _is_cloud_event from azure.core.pipeline.policies import AzureKeyCredentialPolicy from azure.core.credentials import AzureKeyCredential from .._generated.aio import EventGridPublisherClient as EventGridPublisherClientAsync from .. import _constants as constants +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Union, Dict, List + SendType = Union[ + CloudEvent, + EventGridEvent, + CustomEvent, + Dict, + List[CloudEvent], + List[EventGridEvent], + List[CustomEvent], + List[Dict] + ] class EventGridPublisherClient(object): """Asynchronous EventGrid Python Publisher Client. @@ -30,23 +43,30 @@ class EventGridPublisherClient(object): def __init__(self, topic_hostname, credential, **kwargs): # type: (str, Union[AzureKeyCredential, EventGridSharedAccessSignatureCredential], Any) -> None auth_policy = _get_authentication_policy(credential) - self._client = EventGridPublisherClientAsync(authentication_policy=auth_policy) + self._client = EventGridPublisherClientAsync(authentication_policy=auth_policy, **kwargs) + topic_hostname = _get_topic_hostname_only_fqdn(topic_hostname) self._topic_hostname = topic_hostname async def send(self, events, **kwargs): - # type: (Union[List[CloudEvent], List[EventGridEvent], List[CustomEvent]], Any) -> None + # type: (SendType) -> None """Sends event data to topic hostname specified during client initialization. :param events: A list of CloudEvent/EventGridEvent/CustomEvent to be sent. :type events: Union[List[models.CloudEvent], List[models.EventGridEvent], List[models.CustomEvent]] + :keyword str content_type: The type of content to be used to send the events. + Has default value "application/json; charset=utf-8" for EventGridEvents, with "cloudevents-batch+json" for CloudEvents :rtype: None - raise: :class:`ValueError`, when events do not follow specified SendType. + :raise: :class:`ValueError`, when events do not follow specified SendType. """ + if not isinstance(events, list): + events = [events] - if all(isinstance(e, CloudEvent) for e in events): + if all(isinstance(e, CloudEvent) for e in events) or all(_is_cloud_event(e) for e in events): + kwargs.setdefault("content_type", "application/cloudevents-batch+json; charset=utf-8") await self._client.publish_cloud_event_events(self._topic_hostname, events, **kwargs) - elif all(isinstance(e, EventGridEvent) for e in events): + elif all(isinstance(e, EventGridEvent) for e in events) or all(isinstance(e, dict) for e in events): + kwargs.setdefault("content_type", "application/json; charset=utf-8") await self._client.publish_events(self._topic_hostname, events, **kwargs) elif all(isinstance(e, CustomEvent) for e in events): serialized_events = [dict(e) for e in events] diff --git a/sdk/eventgrid/azure-eventgrid/tests/conftest.py b/sdk/eventgrid/azure-eventgrid/tests/conftest.py new file mode 100644 index 000000000000..2e685fe040dd --- /dev/null +++ b/sdk/eventgrid/azure-eventgrid/tests/conftest.py @@ -0,0 +1,33 @@ +# -------------------------------------------------------------------------- +# +# Copyright (c) Microsoft Corporation. All rights reserved. +# +# The MIT License (MIT) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the ""Software""), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# +# -------------------------------------------------------------------------- +import platform +import sys + + +# Ignore async tests for Python < 3.5 +collect_ignore_glob = [] +if sys.version_info < (3, 5): + collect_ignore_glob.append("*_async.py") diff --git a/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_cloud_event_data_as_list.yaml b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_cloud_event_data_as_list.yaml new file mode 100644 index 000000000000..0cd77a94c75e --- /dev/null +++ b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_cloud_event_data_as_list.yaml @@ -0,0 +1,40 @@ +interactions: +- request: + body: '[{"id": "3dc4b913-4bc2-41f8-be9b-bf1f67069806", "source": "http://samplesource.dev", + "data": "cloudevent", "type": "Sample.Cloud.Event", "time": "2020-08-19T03:36:41.947462Z", + "specversion": "1.0"}]' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '198' + Content-Type: + - application/cloudevents-batch+json; charset=utf-8 + User-Agent: + - azsdk-python-eventgridpublisherclient/unknown Python/3.7.3 (Windows-10-10.0.18362-SP0) + aeg-sas-key: + - dHUaOOg5xRj+D7iH/AC92GyHweLx9ugrDuMDg4e5Xvw= + method: POST + uri: https://cloudeventgridtestegtopic.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 + response: + body: + string: '' + headers: + api-supported-versions: + - '2018-01-01' + content-length: + - '0' + date: + - Wed, 19 Aug 2020 03:36:43 GMT + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_cloud_event_data_dict.yaml b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_cloud_event_data_dict.yaml new file mode 100644 index 000000000000..d0ffe1e0c37f --- /dev/null +++ b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_cloud_event_data_dict.yaml @@ -0,0 +1,40 @@ +interactions: +- request: + body: '[{"id": "51c18497-2a25-45f1-b9ba-fdaf08c00263", "source": "http://samplesource.dev", + "data": {"sample": "cloudevent"}, "type": "Sample.Cloud.Event", "time": "2020-08-19T03:36:42.304479Z", + "specversion": "1.0"}]' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '210' + Content-Type: + - application/cloudevents-batch+json; charset=utf-8 + User-Agent: + - azsdk-python-eventgridpublisherclient/unknown Python/3.7.3 (Windows-10-10.0.18362-SP0) + aeg-sas-key: + - dHUaOOg5xRj+D7iH/AC92GyHweLx9ugrDuMDg4e5Xvw= + method: POST + uri: https://cloudeventgridtestegtopic.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 + response: + body: + string: '' + headers: + api-supported-versions: + - '2018-01-01' + content-length: + - '0' + date: + - Wed, 19 Aug 2020 03:36:43 GMT + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_cloud_event_data_str.yaml b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_cloud_event_data_str.yaml new file mode 100644 index 000000000000..d5daebc0544c --- /dev/null +++ b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_cloud_event_data_str.yaml @@ -0,0 +1,40 @@ +interactions: +- request: + body: '[{"id": "6a315e93-a59c-4eca-b2f2-6bf3b8f27984", "source": "http://samplesource.dev", + "data": "cloudevent", "type": "Sample.Cloud.Event", "time": "2020-08-19T03:36:42.629467Z", + "specversion": "1.0"}]' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '198' + Content-Type: + - application/cloudevents-batch+json; charset=utf-8 + User-Agent: + - azsdk-python-eventgridpublisherclient/unknown Python/3.7.3 (Windows-10-10.0.18362-SP0) + aeg-sas-key: + - dHUaOOg5xRj+D7iH/AC92GyHweLx9ugrDuMDg4e5Xvw= + method: POST + uri: https://cloudeventgridtestegtopic.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 + response: + body: + string: '' + headers: + api-supported-versions: + - '2018-01-01' + content-length: + - '0' + date: + - Wed, 19 Aug 2020 03:36:43 GMT + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_cloud_event_dict.yaml b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_cloud_event_dict.yaml new file mode 100644 index 000000000000..58267d8b955e --- /dev/null +++ b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_cloud_event_dict.yaml @@ -0,0 +1,39 @@ +interactions: +- request: + body: '[{"id": "1234", "source": "http://samplesource.dev", "data": "cloudevent", + "type": "Sample.Cloud.Event", "specversion": "1.0"}]' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '127' + Content-Type: + - application/cloudevents-batch+json; charset=utf-8 + User-Agent: + - azsdk-python-eventgridpublisherclient/unknown Python/3.7.3 (Windows-10-10.0.18362-SP0) + aeg-sas-key: + - dHUaOOg5xRj+D7iH/AC92GyHweLx9ugrDuMDg4e5Xvw= + method: POST + uri: https://cloudeventgridtestegtopic.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 + response: + body: + string: '' + headers: + api-supported-versions: + - '2018-01-01' + content-length: + - '0' + date: + - Wed, 19 Aug 2020 03:36:44 GMT + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_custom_schema_event.yaml b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_custom_schema_event.yaml new file mode 100644 index 000000000000..3c126ae700cf --- /dev/null +++ b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_custom_schema_event.yaml @@ -0,0 +1,40 @@ +interactions: +- request: + body: '[{"customSubject": "sample", "customEventType": "sample.event", "customDataVersion": + "2.0", "customId": "1234", "customEventTime": "2020-08-19T03:36:56.936961+00:00", + "customData": "sample data"}]' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '196' + Content-Type: + - application/json + User-Agent: + - azsdk-python-eventgridpublisherclient/unknown Python/3.7.3 (Windows-10-10.0.18362-SP0) + aeg-sas-key: + - uPQPJHQHsAhBxWOWtRXslz3sXf7TJ5lcqLZ6SC4QzJ4= + method: POST + uri: https://customeventgridtestegtopic.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 + response: + body: + string: '' + headers: + api-supported-versions: + - '2018-01-01' + content-length: + - '0' + date: + - Wed, 19 Aug 2020 03:36:57 GMT + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_custom_schema_event_as_list.yaml b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_custom_schema_event_as_list.yaml new file mode 100644 index 000000000000..6f84dc2cbe23 --- /dev/null +++ b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_custom_schema_event_as_list.yaml @@ -0,0 +1,44 @@ +interactions: +- request: + body: '[{"customSubject": "sample", "customEventType": "sample.event", "customDataVersion": + "2.0", "customId": "1234", "customEventTime": "2020-08-19T03:36:57.422734+00:00", + "customData": "sample data"}, {"customSubject": "sample2", "customEventType": + "sample.event", "customDataVersion": "2.0", "customId": "12345", "customEventTime": + "2020-08-19T03:36:57.422734+00:00", "customData": "sample data 2"}]' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '396' + Content-Type: + - application/json + User-Agent: + - azsdk-python-eventgridpublisherclient/unknown Python/3.7.3 (Windows-10-10.0.18362-SP0) + aeg-sas-key: + - uPQPJHQHsAhBxWOWtRXslz3sXf7TJ5lcqLZ6SC4QzJ4= + method: POST + uri: https://customeventgridtestegtopic.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 + response: + body: + string: '' + headers: + api-supported-versions: + - '2018-01-01' + connection: + - close + content-length: + - '0' + date: + - Wed, 19 Aug 2020 03:36:58 GMT + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_event_grid_event_data_as_list.yaml b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_event_grid_event_data_as_list.yaml new file mode 100644 index 000000000000..d5cab7375376 --- /dev/null +++ b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_event_grid_event_data_as_list.yaml @@ -0,0 +1,42 @@ +interactions: +- request: + body: '[{"id": "576f3e27-5433-47b3-8b4e-e31ea6a1bdde", "subject": "sample", "data": + "eventgridevent", "eventType": "Sample.EventGrid.Event", "eventTime": "2020-08-19T03:37:11.07064Z", + "dataVersion": "2.0"}, {"id": "6c359c8d-b1fe-4458-96c5-eaffcd864573", "subject": + "sample2", "data": "eventgridevent2", "eventType": "Sample.EventGrid.Event", + "eventTime": "2020-08-19T03:37:11.071641Z", "dataVersion": "2.0"}]' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '401' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - azsdk-python-eventgridpublisherclient/unknown Python/3.7.3 (Windows-10-10.0.18362-SP0) + aeg-sas-key: + - dS38eoc9IPjofR5npZ1QXrsb3Gz/Kdt99ZdK9SJ+99w= + method: POST + uri: https://eventgridtestegtopic.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 + response: + body: + string: '' + headers: + api-supported-versions: + - '2018-01-01' + content-length: + - '0' + date: + - Wed, 19 Aug 2020 03:37:12 GMT + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_event_grid_event_data_dict.yaml b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_event_grid_event_data_dict.yaml new file mode 100644 index 000000000000..d20ed7f4c9c4 --- /dev/null +++ b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_event_grid_event_data_dict.yaml @@ -0,0 +1,40 @@ +interactions: +- request: + body: '[{"id": "fbf293f1-d609-4fd8-8d3b-b0ed0e406795", "subject": "sample", "data": + {"sample": "eventgridevent"}, "eventType": "Sample.EventGrid.Event", "eventTime": + "2020-08-19T03:37:11.563581Z", "dataVersion": "2.0"}]' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '212' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - azsdk-python-eventgridpublisherclient/unknown Python/3.7.3 (Windows-10-10.0.18362-SP0) + aeg-sas-key: + - dS38eoc9IPjofR5npZ1QXrsb3Gz/Kdt99ZdK9SJ+99w= + method: POST + uri: https://eventgridtestegtopic.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 + response: + body: + string: '' + headers: + api-supported-versions: + - '2018-01-01' + content-length: + - '0' + date: + - Wed, 19 Aug 2020 03:37:12 GMT + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_event_grid_event_data_str.yaml b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_event_grid_event_data_str.yaml new file mode 100644 index 000000000000..22679778a2fc --- /dev/null +++ b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_event_grid_event_data_str.yaml @@ -0,0 +1,40 @@ +interactions: +- request: + body: '[{"id": "10994707-90e7-431e-88f0-2abae07cc806", "subject": "sample", "data": + "eventgridevent", "eventType": "Sample.EventGrid.Event", "eventTime": "2020-08-19T03:37:11.893631Z", + "dataVersion": "2.0"}]' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '200' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - azsdk-python-eventgridpublisherclient/unknown Python/3.7.3 (Windows-10-10.0.18362-SP0) + aeg-sas-key: + - dS38eoc9IPjofR5npZ1QXrsb3Gz/Kdt99ZdK9SJ+99w= + method: POST + uri: https://eventgridtestegtopic.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 + response: + body: + string: '' + headers: + api-supported-versions: + - '2018-01-01' + content-length: + - '0' + date: + - Wed, 19 Aug 2020 03:37:12 GMT + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_signature_credential.yaml b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_signature_credential.yaml new file mode 100644 index 000000000000..35bc4e03ed5b --- /dev/null +++ b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_signature_credential.yaml @@ -0,0 +1,40 @@ +interactions: +- request: + body: '[{"id": "18fe69c3-59bf-4e53-97e1-2e5310e4884f", "subject": "sample", "data": + {"sample": "eventgridevent"}, "eventType": "Sample.EventGrid.Event", "eventTime": + "2020-08-19T03:37:12.238633Z", "dataVersion": "2.0"}]' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '212' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - azsdk-python-eventgridpublisherclient/unknown Python/3.7.3 (Windows-10-10.0.18362-SP0) + aeg-sas-token: + - r=https%3A%2F%2Feventgridtestpm22oyo2kyl.westus-1.eventgrid.azure.net%2Fapi%2Fevents%3FapiVersion%3D2018-01-01&e=2020-08-19%2004%3A37%3A12.237630%2B00%3A00&s=NiA404pCphKDcLVP9%2FjN%2FY0%2BnejDRolHVkrEnfrXk6c%3D + method: POST + uri: https://eventgridtestegtopic.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 + response: + body: + string: '' + headers: + api-supported-versions: + - '2018-01-01' + content-length: + - '0' + date: + - Wed, 19 Aug 2020 03:37:12 GMT + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_cloud_event_data_as_list.yaml b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_cloud_event_data_as_list.yaml new file mode 100644 index 000000000000..b3c4782bd674 --- /dev/null +++ b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_cloud_event_data_as_list.yaml @@ -0,0 +1,30 @@ +interactions: +- request: + body: '[{"id": "a07023d9-c7ff-4f38-abe0-c3a8e555991b", "source": "http://samplesource.dev", + "data": "cloudevent", "type": "Sample.Cloud.Event", "time": "2020-08-26T08:36:53.957412Z", + "specversion": "1.0"}]' + headers: + Content-Length: + - '198' + Content-Type: + - application/cloudevents-batch+json; charset=utf-8 + User-Agent: + - azsdk-python-eventgridpublisherclient/unknown Python/3.7.3 (Windows-10-10.0.18362-SP0) + aeg-sas-key: + - lWdojve+oWWftlsc/y8gop1eyam9FXonHf0jmkPpA6Q= + method: POST + uri: https://cloudeventgridtestegtopic.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 + response: + body: + string: '' + headers: + api-supported-versions: '2018-01-01' + content-length: '0' + date: Wed, 26 Aug 2020 08:36:53 GMT + server: Microsoft-HTTPAPI/2.0 + strict-transport-security: max-age=31536000; includeSubDomains + status: + code: 200 + message: OK + url: https://cloudeventgridtestgz6mhk.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 +version: 1 diff --git a/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_cloud_event_data_dict.yaml b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_cloud_event_data_dict.yaml new file mode 100644 index 000000000000..459913a84c1d --- /dev/null +++ b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_cloud_event_data_dict.yaml @@ -0,0 +1,30 @@ +interactions: +- request: + body: '[{"id": "75b863c6-4344-47c5-a449-08ba3e68f912", "source": "http://samplesource.dev", + "data": {"sample": "cloudevent"}, "type": "Sample.Cloud.Event", "time": "2020-08-26T08:36:54.319455Z", + "specversion": "1.0"}]' + headers: + Content-Length: + - '210' + Content-Type: + - application/cloudevents-batch+json; charset=utf-8 + User-Agent: + - azsdk-python-eventgridpublisherclient/unknown Python/3.7.3 (Windows-10-10.0.18362-SP0) + aeg-sas-key: + - lWdojve+oWWftlsc/y8gop1eyam9FXonHf0jmkPpA6Q= + method: POST + uri: https://cloudeventgridtestegtopic.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 + response: + body: + string: '' + headers: + api-supported-versions: '2018-01-01' + content-length: '0' + date: Wed, 26 Aug 2020 08:36:54 GMT + server: Microsoft-HTTPAPI/2.0 + strict-transport-security: max-age=31536000; includeSubDomains + status: + code: 200 + message: OK + url: https://cloudeventgridtestgz6mhk.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 +version: 1 diff --git a/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_cloud_event_data_str.yaml b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_cloud_event_data_str.yaml new file mode 100644 index 000000000000..0e83ae4d6684 --- /dev/null +++ b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_cloud_event_data_str.yaml @@ -0,0 +1,30 @@ +interactions: +- request: + body: '[{"id": "69cea73a-a033-4f12-ae17-0d2b21b4adbb", "source": "http://samplesource.dev", + "data": "cloudevent", "type": "Sample.Cloud.Event", "time": "2020-08-26T08:36:54.592725Z", + "specversion": "1.0"}]' + headers: + Content-Length: + - '198' + Content-Type: + - application/cloudevents-batch+json; charset=utf-8 + User-Agent: + - azsdk-python-eventgridpublisherclient/unknown Python/3.7.3 (Windows-10-10.0.18362-SP0) + aeg-sas-key: + - lWdojve+oWWftlsc/y8gop1eyam9FXonHf0jmkPpA6Q= + method: POST + uri: https://cloudeventgridtestegtopic.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 + response: + body: + string: '' + headers: + api-supported-versions: '2018-01-01' + content-length: '0' + date: Wed, 26 Aug 2020 08:36:53 GMT + server: Microsoft-HTTPAPI/2.0 + strict-transport-security: max-age=31536000; includeSubDomains + status: + code: 200 + message: OK + url: https://cloudeventgridtestgz6mhk.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 +version: 1 diff --git a/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_cloud_event_dict.yaml b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_cloud_event_dict.yaml new file mode 100644 index 000000000000..3c78a559a94b --- /dev/null +++ b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_cloud_event_dict.yaml @@ -0,0 +1,29 @@ +interactions: +- request: + body: '[{"id": "1234", "source": "http://samplesource.dev", "data": "cloudevent", + "type": "Sample.Cloud.Event", "specversion": "1.0"}]' + headers: + Content-Length: + - '127' + Content-Type: + - application/cloudevents-batch+json; charset=utf-8 + User-Agent: + - azsdk-python-eventgridpublisherclient/unknown Python/3.7.3 (Windows-10-10.0.18362-SP0) + aeg-sas-key: + - lWdojve+oWWftlsc/y8gop1eyam9FXonHf0jmkPpA6Q= + method: POST + uri: https://cloudeventgridtestegtopic.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 + response: + body: + string: '' + headers: + api-supported-versions: '2018-01-01' + content-length: '0' + date: Wed, 26 Aug 2020 08:36:54 GMT + server: Microsoft-HTTPAPI/2.0 + strict-transport-security: max-age=31536000; includeSubDomains + status: + code: 200 + message: OK + url: https://cloudeventgridtestgz6mhk.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 +version: 1 diff --git a/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_custom_schema_event.yaml b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_custom_schema_event.yaml new file mode 100644 index 000000000000..f62e83d46adf --- /dev/null +++ b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_custom_schema_event.yaml @@ -0,0 +1,30 @@ +interactions: +- request: + body: '[{"customSubject": "sample", "customEventType": "sample.event", "customDataVersion": + "2.0", "customId": "1234", "customEventTime": "2020-08-26T08:37:08.332700+00:00", + "customData": "sample data"}]' + headers: + Content-Length: + - '196' + Content-Type: + - application/json + User-Agent: + - azsdk-python-eventgridpublisherclient/unknown Python/3.7.3 (Windows-10-10.0.18362-SP0) + aeg-sas-key: + - pWVPWql9F5Q5CqInHnpIWhyIWYW0gjMKy3N93kFcq8c= + method: POST + uri: https://customeventgridtestegtopic.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 + response: + body: + string: '' + headers: + api-supported-versions: '2018-01-01' + content-length: '0' + date: Wed, 26 Aug 2020 08:37:08 GMT + server: Microsoft-HTTPAPI/2.0 + strict-transport-security: max-age=31536000; includeSubDomains + status: + code: 200 + message: OK + url: https://customeventgridtestj225p.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 +version: 1 diff --git a/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_custom_schema_event_as_list.yaml b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_custom_schema_event_as_list.yaml new file mode 100644 index 000000000000..8a6bd49d86e9 --- /dev/null +++ b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_custom_schema_event_as_list.yaml @@ -0,0 +1,32 @@ +interactions: +- request: + body: '[{"customSubject": "sample", "customEventType": "sample.event", "customDataVersion": + "2.0", "customId": "1234", "customEventTime": "2020-08-26T08:37:08.710695+00:00", + "customData": "sample data"}, {"customSubject": "sample2", "customEventType": + "sample.event", "customDataVersion": "2.0", "customId": "12345", "customEventTime": + "2020-08-26T08:37:08.710695+00:00", "customData": "sample data 2"}]' + headers: + Content-Length: + - '396' + Content-Type: + - application/json + User-Agent: + - azsdk-python-eventgridpublisherclient/unknown Python/3.7.3 (Windows-10-10.0.18362-SP0) + aeg-sas-key: + - pWVPWql9F5Q5CqInHnpIWhyIWYW0gjMKy3N93kFcq8c= + method: POST + uri: https://customeventgridtestegtopic.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 + response: + body: + string: '' + headers: + api-supported-versions: '2018-01-01' + content-length: '0' + date: Wed, 26 Aug 2020 08:37:08 GMT + server: Microsoft-HTTPAPI/2.0 + strict-transport-security: max-age=31536000; includeSubDomains + status: + code: 200 + message: OK + url: https://customeventgridtestj225p.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 +version: 1 diff --git a/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_event_grid_event_data_as_list.yaml b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_event_grid_event_data_as_list.yaml new file mode 100644 index 000000000000..ffab3ee0d911 --- /dev/null +++ b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_event_grid_event_data_as_list.yaml @@ -0,0 +1,32 @@ +interactions: +- request: + body: '[{"id": "d8217ffd-6e75-44e7-adbb-ed9869aa275b", "subject": "sample", "data": + "eventgridevent", "eventType": "Sample.EventGrid.Event", "eventTime": "2020-08-26T08:37:22.429524Z", + "dataVersion": "2.0"}, {"id": "8238c6eb-dd48-4404-bdb1-cc3fd06ceabd", "subject": + "sample2", "data": "eventgridevent2", "eventType": "Sample.EventGrid.Event", + "eventTime": "2020-08-26T08:37:22.429524Z", "dataVersion": "2.0"}]' + headers: + Content-Length: + - '402' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - azsdk-python-eventgridpublisherclient/unknown Python/3.7.3 (Windows-10-10.0.18362-SP0) + aeg-sas-key: + - NpNkZLDV1WROE17wLypJk8VTz8hmAcByPv3tsCmhlys= + method: POST + uri: https://eventgridtestegtopic.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 + response: + body: + string: '' + headers: + api-supported-versions: '2018-01-01' + content-length: '0' + date: Wed, 26 Aug 2020 08:37:21 GMT + server: Microsoft-HTTPAPI/2.0 + strict-transport-security: max-age=31536000; includeSubDomains + status: + code: 200 + message: OK + url: https://eventgridtesty45wuyer4g4.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 +version: 1 diff --git a/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_event_grid_event_data_dict.yaml b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_event_grid_event_data_dict.yaml new file mode 100644 index 000000000000..f20a2a16b4d8 --- /dev/null +++ b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_event_grid_event_data_dict.yaml @@ -0,0 +1,30 @@ +interactions: +- request: + body: '[{"id": "3654b7c2-6219-45a6-a6e6-001770982469", "subject": "sample", "data": + {"sample": "eventgridevent"}, "eventType": "Sample.EventGrid.Event", "eventTime": + "2020-08-26T08:37:22.81246Z", "dataVersion": "2.0"}]' + headers: + Content-Length: + - '211' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - azsdk-python-eventgridpublisherclient/unknown Python/3.7.3 (Windows-10-10.0.18362-SP0) + aeg-sas-key: + - NpNkZLDV1WROE17wLypJk8VTz8hmAcByPv3tsCmhlys= + method: POST + uri: https://eventgridtestegtopic.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 + response: + body: + string: '' + headers: + api-supported-versions: '2018-01-01' + content-length: '0' + date: Wed, 26 Aug 2020 08:37:22 GMT + server: Microsoft-HTTPAPI/2.0 + strict-transport-security: max-age=31536000; includeSubDomains + status: + code: 200 + message: OK + url: https://eventgridtesty45wuyer4g4.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 +version: 1 diff --git a/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_event_grid_event_data_str.yaml b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_event_grid_event_data_str.yaml new file mode 100644 index 000000000000..74bde4b6c0e9 --- /dev/null +++ b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_event_grid_event_data_str.yaml @@ -0,0 +1,30 @@ +interactions: +- request: + body: '[{"id": "5bd130e8-0001-488a-9cd6-807d6bb30270", "subject": "sample", "data": + "eventgridevent", "eventType": "Sample.EventGrid.Event", "eventTime": "2020-08-26T08:37:23.122484Z", + "dataVersion": "2.0"}]' + headers: + Content-Length: + - '200' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - azsdk-python-eventgridpublisherclient/unknown Python/3.7.3 (Windows-10-10.0.18362-SP0) + aeg-sas-key: + - NpNkZLDV1WROE17wLypJk8VTz8hmAcByPv3tsCmhlys= + method: POST + uri: https://eventgridtestegtopic.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 + response: + body: + string: '' + headers: + api-supported-versions: '2018-01-01' + content-length: '0' + date: Wed, 26 Aug 2020 08:37:23 GMT + server: Microsoft-HTTPAPI/2.0 + strict-transport-security: max-age=31536000; includeSubDomains + status: + code: 200 + message: OK + url: https://eventgridtesty45wuyer4g4.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 +version: 1 diff --git a/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_signature_credential.yaml b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_signature_credential.yaml new file mode 100644 index 000000000000..28c6113cb3a9 --- /dev/null +++ b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_signature_credential.yaml @@ -0,0 +1,30 @@ +interactions: +- request: + body: '[{"id": "711ffb3e-f134-45bd-b12c-b9d9463b2b95", "subject": "sample", "data": + {"sample": "eventgridevent"}, "eventType": "Sample.EventGrid.Event", "eventTime": + "2020-08-26T08:37:23.403459Z", "dataVersion": "2.0"}]' + headers: + Content-Length: + - '212' + Content-Type: + - application/json; charset=utf-8 + User-Agent: + - azsdk-python-eventgridpublisherclient/unknown Python/3.7.3 (Windows-10-10.0.18362-SP0) + aeg-sas-token: + - r=https%3A%2F%2Feventgridtesty45wuyer4g4.westus-1.eventgrid.azure.net%2Fapi%2Fevents%3FapiVersion%3D2018-01-01&e=2020-08-26%2009%3A37%3A23.402457%2B00%3A00&s=CCoSPjEt0vQovS3vOJXxswxV%2Frkxn9TCQPjtmE8xNeM%3D + method: POST + uri: https://eventgridtestegtopic.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 + response: + body: + string: '' + headers: + api-supported-versions: '2018-01-01' + content-length: '0' + date: Wed, 26 Aug 2020 08:37:22 GMT + server: Microsoft-HTTPAPI/2.0 + strict-transport-security: max-age=31536000; includeSubDomains + status: + code: 200 + message: OK + url: https://eventgridtesty45wuyer4g4.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 +version: 1 diff --git a/sdk/eventgrid/azure-eventgrid/tests/test_eg_publisher_client.py b/sdk/eventgrid/azure-eventgrid/tests/test_eg_publisher_client.py index 17924d3b06f5..3c4a45a021a8 100644 --- a/sdk/eventgrid/azure-eventgrid/tests/test_eg_publisher_client.py +++ b/sdk/eventgrid/azure-eventgrid/tests/test_eg_publisher_client.py @@ -25,7 +25,7 @@ class EventGridPublisherClientTests(AzureMgmtTestCase): @pytest.mark.liveTest @CachedResourceGroupPreparer(name_prefix='eventgridtest') @CachedEventGridTopicPreparer(name_prefix='eventgridtest') - def test_eg_publisher_client_publish_event_grid_event_data_dict(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): + def test_send_event_grid_event_data_dict(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): akc_credential = AzureKeyCredential(eventgrid_topic_primary_key) client = EventGridPublisherClient(eventgrid_topic_endpoint, akc_credential) eg_event = EventGridEvent( @@ -34,12 +34,32 @@ def test_eg_publisher_client_publish_event_grid_event_data_dict(self, resource_g event_type="Sample.EventGrid.Event", data_version="2.0" ) - client.send([eg_event]) + client.send(eg_event) @pytest.mark.liveTest @CachedResourceGroupPreparer(name_prefix='eventgridtest') @CachedEventGridTopicPreparer(name_prefix='eventgridtest') - def test_eg_publisher_client_publish_event_grid_event_data_str(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): + def test_send_event_grid_event_data_as_list(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): + akc_credential = AzureKeyCredential(eventgrid_topic_primary_key) + client = EventGridPublisherClient(eventgrid_topic_endpoint, akc_credential) + eg_event1 = EventGridEvent( + subject="sample", + data="eventgridevent", + event_type="Sample.EventGrid.Event", + data_version="2.0" + ) + eg_event2 = EventGridEvent( + subject="sample2", + data="eventgridevent2", + event_type="Sample.EventGrid.Event", + data_version="2.0" + ) + client.send([eg_event1, eg_event2]) + + @pytest.mark.liveTest + @CachedResourceGroupPreparer(name_prefix='eventgridtest') + @CachedEventGridTopicPreparer(name_prefix='eventgridtest') + def test_send_event_grid_event_data_str(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): akc_credential = AzureKeyCredential(eventgrid_topic_primary_key) client = EventGridPublisherClient(eventgrid_topic_endpoint, akc_credential) eg_event = EventGridEvent( @@ -48,12 +68,12 @@ def test_eg_publisher_client_publish_event_grid_event_data_str(self, resource_gr event_type="Sample.EventGrid.Event", data_version="2.0" ) - client.send([eg_event]) + client.send(eg_event) @pytest.mark.liveTest @CachedResourceGroupPreparer(name_prefix='eventgridtest') @CachedEventGridTopicPreparer(name_prefix='cloudeventgridtest') - def test_eg_publisher_client_publish_cloud_event_data_dict(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): + def test_send_cloud_event_data_dict(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): akc_credential = AzureKeyCredential(eventgrid_topic_primary_key) client = EventGridPublisherClient(eventgrid_topic_endpoint, akc_credential) cloud_event = CloudEvent( @@ -61,12 +81,26 @@ def test_eg_publisher_client_publish_cloud_event_data_dict(self, resource_group, data = {"sample": "cloudevent"}, type="Sample.Cloud.Event" ) - client.send([cloud_event]) + client.send(cloud_event) + + @pytest.mark.liveTest + @CachedResourceGroupPreparer(name_prefix='eventgridtest') + @CachedEventGridTopicPreparer(name_prefix='cloudeventgridtest') + def test_send_cloud_event_data_str(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): + akc_credential = AzureKeyCredential(eventgrid_topic_primary_key) + client = EventGridPublisherClient(eventgrid_topic_endpoint, akc_credential) + cloud_event = CloudEvent( + source = "http://samplesource.dev", + data = "cloudevent", + type="Sample.Cloud.Event" + ) + client.send(cloud_event) + @pytest.mark.liveTest @CachedResourceGroupPreparer(name_prefix='eventgridtest') @CachedEventGridTopicPreparer(name_prefix='cloudeventgridtest') - def test_eg_publisher_client_publish_cloud_event_data_str(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): + def test_send_cloud_event_data_as_list(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): akc_credential = AzureKeyCredential(eventgrid_topic_primary_key) client = EventGridPublisherClient(eventgrid_topic_endpoint, akc_credential) cloud_event = CloudEvent( @@ -75,11 +109,26 @@ def test_eg_publisher_client_publish_cloud_event_data_str(self, resource_group, type="Sample.Cloud.Event" ) client.send([cloud_event]) - + + @pytest.mark.liveTest + @CachedResourceGroupPreparer(name_prefix='eventgridtest') + @CachedEventGridTopicPreparer(name_prefix='cloudeventgridtest') + def test_send_cloud_event_dict(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): + akc_credential = AzureKeyCredential(eventgrid_topic_primary_key) + client = EventGridPublisherClient(eventgrid_topic_endpoint, akc_credential) + cloud_event1 = { + "id": "1234", + "source": "http://samplesource.dev", + "specversion": "1.0", + "data": "cloudevent", + "type": "Sample.Cloud.Event" + } + client.send(cloud_event1) + @pytest.mark.liveTest @CachedResourceGroupPreparer(name_prefix='eventgridtest') @CachedEventGridTopicPreparer(name_prefix='eventgridtest') - def test_eg_publisher_client_publish_signature_credential(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): + def test_send_signature_credential(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): expiration_date_utc = dt.datetime.now(UTC()) + timedelta(hours=1) signature = generate_shared_access_signature(eventgrid_topic_endpoint, eventgrid_topic_primary_key, expiration_date_utc) credential = EventGridSharedAccessSignatureCredential(signature) @@ -90,12 +139,12 @@ def test_eg_publisher_client_publish_signature_credential(self, resource_group, event_type="Sample.EventGrid.Event", data_version="2.0" ) - client.send([eg_event]) + client.send(eg_event) @pytest.mark.liveTest @CachedResourceGroupPreparer(name_prefix='eventgridtest') @CachedEventGridTopicPreparer(name_prefix='customeventgridtest') - def test_eg_publisher_client_publish_custom_schema_event(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): + def test_send_custom_schema_event(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): akc_credential = AzureKeyCredential(eventgrid_topic_primary_key) client = EventGridPublisherClient(eventgrid_topic_endpoint, akc_credential) custom_event = CustomEvent( @@ -108,4 +157,32 @@ def test_eg_publisher_client_publish_custom_schema_event(self, resource_group, e "customData": "sample data" } ) - client.send([custom_event]) \ No newline at end of file + client.send(custom_event) + + @pytest.mark.liveTest + @CachedResourceGroupPreparer(name_prefix='eventgridtest') + @CachedEventGridTopicPreparer(name_prefix='customeventgridtest') + def test_send_custom_schema_event_as_list(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): + akc_credential = AzureKeyCredential(eventgrid_topic_primary_key) + client = EventGridPublisherClient(eventgrid_topic_endpoint, akc_credential) + custom_event1 = CustomEvent( + { + "customSubject": "sample", + "customEventType": "sample.event", + "customDataVersion": "2.0", + "customId": "1234", + "customEventTime": dt.datetime.now(UTC()).isoformat(), + "customData": "sample data" + } + ) + custom_event2 = CustomEvent( + { + "customSubject": "sample2", + "customEventType": "sample.event", + "customDataVersion": "2.0", + "customId": "12345", + "customEventTime": dt.datetime.now(UTC()).isoformat(), + "customData": "sample data 2" + } + ) + client.send([custom_event1, custom_event2]) diff --git a/sdk/eventgrid/azure-eventgrid/tests/test_eg_publisher_client_async.py b/sdk/eventgrid/azure-eventgrid/tests/test_eg_publisher_client_async.py new file mode 100644 index 000000000000..a93dc748dd4b --- /dev/null +++ b/sdk/eventgrid/azure-eventgrid/tests/test_eg_publisher_client_async.py @@ -0,0 +1,199 @@ +#------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +#-------------------------------------------------------------------------- + +import logging +import asyncio +import sys +import os +import pytest +from datetime import timedelta +from msrest.serialization import UTC +import datetime as dt + +from devtools_testutils import AzureMgmtTestCase, CachedResourceGroupPreparer + +from azure.core.credentials import AzureKeyCredential +from azure.eventgrid import CloudEvent, EventGridEvent, CustomEvent ,EventGridSharedAccessSignatureCredential, generate_shared_access_signature +from azure.eventgrid.aio import EventGridPublisherClient + +from eventgrid_preparer import ( + CachedEventGridTopicPreparer +) + +class EventGridPublisherClientTests(AzureMgmtTestCase): + @CachedResourceGroupPreparer(name_prefix='eventgridtest') + @CachedEventGridTopicPreparer(name_prefix='eventgridtest') + @pytest.mark.asyncio + async def test_send_event_grid_event_data_dict(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): + akc_credential = AzureKeyCredential(eventgrid_topic_primary_key) + client = EventGridPublisherClient(eventgrid_topic_endpoint, akc_credential) + eg_event = EventGridEvent( + subject="sample", + data={"sample": "eventgridevent"}, + event_type="Sample.EventGrid.Event", + data_version="2.0" + ) + await client.send(eg_event) + + + @CachedResourceGroupPreparer(name_prefix='eventgridtest') + @CachedEventGridTopicPreparer(name_prefix='eventgridtest') + @pytest.mark.asyncio + async def test_send_event_grid_event_data_as_list(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): + akc_credential = AzureKeyCredential(eventgrid_topic_primary_key) + client = EventGridPublisherClient(eventgrid_topic_endpoint, akc_credential) + eg_event1 = EventGridEvent( + subject="sample", + data="eventgridevent", + event_type="Sample.EventGrid.Event", + data_version="2.0" + ) + eg_event2 = EventGridEvent( + subject="sample2", + data="eventgridevent2", + event_type="Sample.EventGrid.Event", + data_version="2.0" + ) + await client.send([eg_event1, eg_event2]) + + + @CachedResourceGroupPreparer(name_prefix='eventgridtest') + @CachedEventGridTopicPreparer(name_prefix='eventgridtest') + @pytest.mark.asyncio + async def test_send_event_grid_event_data_str(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): + akc_credential = AzureKeyCredential(eventgrid_topic_primary_key) + client = EventGridPublisherClient(eventgrid_topic_endpoint, akc_credential) + eg_event = EventGridEvent( + subject="sample", + data="eventgridevent", + event_type="Sample.EventGrid.Event", + data_version="2.0" + ) + await client.send(eg_event) + + + @CachedResourceGroupPreparer(name_prefix='eventgridtest') + @CachedEventGridTopicPreparer(name_prefix='cloudeventgridtest') + @pytest.mark.asyncio + async def test_send_cloud_event_data_dict(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): + akc_credential = AzureKeyCredential(eventgrid_topic_primary_key) + client = EventGridPublisherClient(eventgrid_topic_endpoint, akc_credential) + cloud_event = CloudEvent( + source = "http://samplesource.dev", + data = {"sample": "cloudevent"}, + type="Sample.Cloud.Event" + ) + await client.send(cloud_event) + + + @CachedResourceGroupPreparer(name_prefix='eventgridtest') + @CachedEventGridTopicPreparer(name_prefix='cloudeventgridtest') + @pytest.mark.asyncio + async def test_send_cloud_event_data_str(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): + akc_credential = AzureKeyCredential(eventgrid_topic_primary_key) + client = EventGridPublisherClient(eventgrid_topic_endpoint, akc_credential) + cloud_event = CloudEvent( + source = "http://samplesource.dev", + data = "cloudevent", + type="Sample.Cloud.Event" + ) + await client.send(cloud_event) + + + + @CachedResourceGroupPreparer(name_prefix='eventgridtest') + @CachedEventGridTopicPreparer(name_prefix='cloudeventgridtest') + @pytest.mark.asyncio + async def test_send_cloud_event_data_as_list(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): + akc_credential = AzureKeyCredential(eventgrid_topic_primary_key) + client = EventGridPublisherClient(eventgrid_topic_endpoint, akc_credential) + cloud_event = CloudEvent( + source = "http://samplesource.dev", + data = "cloudevent", + type="Sample.Cloud.Event" + ) + await client.send([cloud_event]) + + + @CachedResourceGroupPreparer(name_prefix='eventgridtest') + @CachedEventGridTopicPreparer(name_prefix='cloudeventgridtest') + @pytest.mark.asyncio + async def test_send_cloud_event_dict(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): + akc_credential = AzureKeyCredential(eventgrid_topic_primary_key) + client = EventGridPublisherClient(eventgrid_topic_endpoint, akc_credential) + cloud_event1 = { + "id": "1234", + "source": "http://samplesource.dev", + "specversion": "1.0", + "data": "cloudevent", + "type": "Sample.Cloud.Event" + } + await client.send(cloud_event1) + + + @CachedResourceGroupPreparer(name_prefix='eventgridtest') + @CachedEventGridTopicPreparer(name_prefix='eventgridtest') + @pytest.mark.asyncio + async def test_send_signature_credential(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): + expiration_date_utc = dt.datetime.now(UTC()) + timedelta(hours=1) + signature = generate_shared_access_signature(eventgrid_topic_endpoint, eventgrid_topic_primary_key, expiration_date_utc) + credential = EventGridSharedAccessSignatureCredential(signature) + client = EventGridPublisherClient(eventgrid_topic_endpoint, credential) + eg_event = EventGridEvent( + subject="sample", + data={"sample": "eventgridevent"}, + event_type="Sample.EventGrid.Event", + data_version="2.0" + ) + await client.send(eg_event) + + + @CachedResourceGroupPreparer(name_prefix='eventgridtest') + @CachedEventGridTopicPreparer(name_prefix='customeventgridtest') + @pytest.mark.asyncio + async def test_send_custom_schema_event(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): + akc_credential = AzureKeyCredential(eventgrid_topic_primary_key) + client = EventGridPublisherClient(eventgrid_topic_endpoint, akc_credential) + custom_event = CustomEvent( + { + "customSubject": "sample", + "customEventType": "sample.event", + "customDataVersion": "2.0", + "customId": "1234", + "customEventTime": dt.datetime.now(UTC()).isoformat(), + "customData": "sample data" + } + ) + await client.send(custom_event) + + + @CachedResourceGroupPreparer(name_prefix='eventgridtest') + @CachedEventGridTopicPreparer(name_prefix='customeventgridtest') + @pytest.mark.asyncio + async def test_send_custom_schema_event_as_list(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): + akc_credential = AzureKeyCredential(eventgrid_topic_primary_key) + client = EventGridPublisherClient(eventgrid_topic_endpoint, akc_credential) + custom_event1 = CustomEvent( + { + "customSubject": "sample", + "customEventType": "sample.event", + "customDataVersion": "2.0", + "customId": "1234", + "customEventTime": dt.datetime.now(UTC()).isoformat(), + "customData": "sample data" + } + ) + custom_event2 = CustomEvent( + { + "customSubject": "sample2", + "customEventType": "sample.event", + "customDataVersion": "2.0", + "customId": "12345", + "customEventTime": dt.datetime.now(UTC()).isoformat(), + "customData": "sample data 2" + } + ) + await client.send([custom_event1, custom_event2])