File: test_serialization.py

package info (click to toggle)
python-azure 20250603%2Bgit-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 851,724 kB
  • sloc: python: 7,362,925; ansic: 804; javascript: 287; makefile: 195; sh: 145; xml: 109
file content (136 lines) | stat: -rw-r--r-- 5,390 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# -------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for
# license information.
# --------------------------------------------------------------------------

import sys
import pytest
import base64

from azure.core.messaging import CloudEvent
from azure.eventgrid._legacy._helpers import _cloud_event_to_generated
from azure.eventgrid import SystemEventNames, EventGridEvent
from _mocks import (
    cloud_storage_dict,
    cloud_storage_string,
    cloud_storage_bytes,
)


class EventGridSerializationTests:

    def _assert_cloud_event_serialized(self, expected, actual):
        assert expected["source"] == actual["source"]
        assert expected["type"] == actual["type"]
        assert actual["specversion"] == "1.0"
        assert "id" in actual
        assert "time" in actual

    # Cloud Event tests
    def test_cloud_event_serialization_extension_bytes(self, **kwargs):
        data = b"cloudevent"
        cloud_event = CloudEvent(
            source="http://samplesource.dev",
            data=data,
            type="Sample.Cloud.Event",
            extensions={"e1": 1, "e2": 2},
        )

        cloud_event.subject = "subject"  # to test explicit setting of prop
        encoded = base64.b64encode(data).decode("utf-8")
        internal = _cloud_event_to_generated(cloud_event)

        assert internal.additional_properties is not None
        assert "e1" in internal.additional_properties

        json = internal.serialize()

        expected = {
            "source": "http://samplesource.dev",
            "data_base64": encoded,
            "type": "Sample.Cloud.Event",
            "reason_code": 204,
            "e1": 1,
            "e2": 2,
        }

        self._assert_cloud_event_serialized(expected, json)
        assert expected["data_base64"] == json["data_base64"]

    def test_cloud_event_serialization_extension_string(self, **kwargs):
        data = "cloudevent"
        cloud_event = CloudEvent(
            source="http://samplesource.dev",
            data=data,
            type="Sample.Cloud.Event",
            extensions={"e1": 1, "e2": 2},
        )

        cloud_event.subject = "subject"  # to test explicit setting of prop
        internal = _cloud_event_to_generated(cloud_event)

        assert internal.additional_properties is not None
        assert "e1" in internal.additional_properties

        json = internal.serialize()

        expected = {
            "source": "http://samplesource.dev",
            "data": data,
            "type": "Sample.Cloud.Event",
            "reason_code": 204,
            "e1": 1,
            "e2": 2,
        }

        self._assert_cloud_event_serialized(expected, json)
        if sys.version_info > (3, 5):
            assert expected["data"] == json["data"]
        else:
            encoded = base64.b64encode(data).decode("utf-8")
            expected["data_base64"] = encoded
            assert expected["data_base64"] == json["data_base64"]
            assert "data" not in json

    def test_event_grid_event_raises_on_no_data(self):
        with pytest.raises(TypeError):
            eg_event = EventGridEvent(
                subject="sample",
                event_type="Sample.EventGrid.Event",
                data_version="2.0",
            )

    def test_import_from_system_events(self):
        var = SystemEventNames.AcsChatMemberAddedToThreadWithUserEventName
        assert var == "Microsoft.Communication.ChatMemberAddedToThreadWithUser"
        assert SystemEventNames.KeyVaultKeyNearExpiryEventName == "Microsoft.KeyVault.KeyNearExpiry"
        var = SystemEventNames.ServiceBusActiveMessagesAvailableWithNoListenersEventName
        assert var == "Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners"
        var = SystemEventNames.AcsChatThreadParticipantAddedEventName
        assert var == "Microsoft.Communication.ChatThreadParticipantAdded"
        var = SystemEventNames.AcsChatThreadParticipantRemovedEventName
        assert var == "Microsoft.Communication.ChatThreadParticipantRemoved"

    def test_eg_event_repr(self):
        event = EventGridEvent(
            subject="sample2",
            data="eventgridevent2",
            event_type="Sample.EventGrid.Event",
            data_version="2.0",
        )

        assert "EventGridEvent(subject=sample2" in event.__repr__()

    def test_servicebus_system_events_alias(self):
        val = "Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners"
        assert (
            SystemEventNames.ServiceBusDeadletterMessagesAvailableWithNoListenerEventName
            == SystemEventNames.ServiceBusDeadletterMessagesAvailableWithNoListenersEventName
        )
        assert SystemEventNames.ServiceBusDeadletterMessagesAvailableWithNoListenerEventName == val
        assert SystemEventNames.ServiceBusDeadletterMessagesAvailableWithNoListenersEventName == val
        assert SystemEventNames(val) == SystemEventNames.ServiceBusDeadletterMessagesAvailableWithNoListenerEventName
        assert SystemEventNames(val) == SystemEventNames.ServiceBusDeadletterMessagesAvailableWithNoListenersEventName
        with pytest.raises(ValueError):
            SystemEventNames("Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListener")