@@ -60,6 +60,23 @@ def test_missing_headers(self):
60
60
)
61
61
assert isinstance (received_msg , message .Message )
62
62
63
+ def test_missing_schema (self , caplog ):
64
+ """Assert a missing schema package gives an informative log."""
65
+ msg = message .Message ()
66
+ msg ._headers = {
67
+ "fedora_messaging_schema" : "dummy" ,
68
+ "fedora_messaging_schema_package" : "dummy-package" ,
69
+ "fedora_messaging_severity" : message .INFO ,
70
+ }
71
+ received_msg = message .get_message (
72
+ msg ._encoded_routing_key , msg ._properties , msg ._encoded_body
73
+ )
74
+ assert isinstance (received_msg , message .Message )
75
+ assert caplog .messages == [
76
+ 'The schema "dummy" is not in the schema registry! You can install the missing schema '
77
+ "from package 'dummy-package'. Falling back to the default schema..."
78
+ ]
79
+
63
80
@mock .patch .dict (message ._class_to_schema_name , {DeprecatedMessage : "deprecated_message_id" })
64
81
@mock .patch .dict (message ._schema_name_to_class , {"deprecated_message_id" : DeprecatedMessage })
65
82
def test_deprecated (self , caplog ):
@@ -86,6 +103,7 @@ def test_proper_message(self):
86
103
test_id = "test id"
87
104
test_headers = {
88
105
"fedora_messaging_schema" : "base.message" ,
106
+ "fedora_messaging_schema_package" : "fedora_messaging" ,
89
107
"fedora_messaging_severity" : message .WARNING ,
90
108
}
91
109
test_properties = pika .BasicProperties (
@@ -100,9 +118,11 @@ def test_proper_message(self):
100
118
101
119
test_msg .queue = test_queue
102
120
expected_json = (
103
- '{"body": {"test_key": "test_value"}, "headers": {"fedora_messaging_schema": '
104
- '"base.message", "fedora_messaging_severity": 30}, "id": "test id", '
105
- '"priority": 2, "queue": "test queue", "topic": "test topic"}\n '
121
+ '{"body": {"test_key": "test_value"}, "headers": {'
122
+ '"fedora_messaging_schema": "base.message", '
123
+ '"fedora_messaging_schema_package": "fedora_messaging", '
124
+ '"fedora_messaging_severity": 30'
125
+ '}, "id": "test id", "priority": 2, "queue": "test queue", "topic": "test topic"}\n '
106
126
)
107
127
assert expected_json == message .dumps (test_msg )
108
128
@@ -114,6 +134,7 @@ def test_proper_message_multiple(self):
114
134
test_id = "test id"
115
135
test_headers = {
116
136
"fedora_messaging_schema" : "base.message" ,
137
+ "fedora_messaging_schema_package" : "fedora_messaging" ,
117
138
"fedora_messaging_severity" : message .WARNING ,
118
139
}
119
140
test_properties = pika .BasicProperties (
@@ -128,11 +149,17 @@ def test_proper_message_multiple(self):
128
149
test_msg .queue = test_queue
129
150
test_msg2 .queue = test_queue
130
151
expected_json = (
131
- '{"body": {"test_key": "test_value"}, "headers": {"fedora_messaging_schema": '
132
- '"base.message", "fedora_messaging_severity": 30}, "id": "test id", '
152
+ '{"body": {"test_key": "test_value"}, "headers": {'
153
+ '"fedora_messaging_schema": "base.message", '
154
+ '"fedora_messaging_schema_package": "fedora_messaging", '
155
+ '"fedora_messaging_severity": 30'
156
+ '}, "id": "test id", '
133
157
'"priority": 0, "queue": "test queue", "topic": "test topic"}\n '
134
- '{"body": {"test_key": "test_value"}, "headers": {"fedora_messaging_schema": '
135
- '"base.message", "fedora_messaging_severity": 30}, "id": "test id", '
158
+ '{"body": {"test_key": "test_value"}, "headers": {'
159
+ '"fedora_messaging_schema": "base.message", '
160
+ '"fedora_messaging_schema_package": "fedora_messaging", '
161
+ '"fedora_messaging_severity": 30'
162
+ '}, "id": "test id", '
136
163
'"priority": 0, "queue": "test queue", "topic": "test topic"}\n '
137
164
)
138
165
@@ -152,8 +179,11 @@ class TestMessageLoads:
152
179
def test_proper_json (self ):
153
180
"""Assert loading single message from json work."""
154
181
message_json = (
155
- '{"topic": "test topic", "headers": {"fedora_messaging_schema": "base.message", '
156
- '"fedora_messaging_severity": 30}, "id": "test id", "body": '
182
+ '{"topic": "test topic", "headers": {'
183
+ '"fedora_messaging_schema": "base.message", '
184
+ '"fedora_messaging_schema_package": "fedora_messaging", '
185
+ '"fedora_messaging_severity": 30'
186
+ '}, "id": "test id", "body": '
157
187
'{"test_key": "test_value"}, "priority": 2, "queue": "test queue"}\n '
158
188
)
159
189
messages = message .loads (message_json )
@@ -167,6 +197,7 @@ def test_proper_json(self):
167
197
assert 2 == test_message .priority
168
198
assert message .WARNING == test_message ._headers ["fedora_messaging_severity" ]
169
199
assert "base.message" == test_message ._headers ["fedora_messaging_schema" ]
200
+ assert "fedora_messaging" == test_message ._headers ["fedora_messaging_schema_package" ]
170
201
171
202
def test_improper_json (self ):
172
203
"""Assert proper exception is raised when improper json is provided."""
@@ -184,10 +215,11 @@ def test_missing_headers(self):
184
215
}
185
216
test_message = message .load_message (message_dict )
186
217
assert test_message ._headers ["fedora_messaging_schema" ] == "base.message"
218
+ assert test_message ._headers ["fedora_messaging_schema_package" ] == "fedora_messaging"
187
219
assert test_message ._headers ["fedora_messaging_severity" ] == message .INFO
188
220
assert "sent-at" in test_message ._headers
189
221
190
- def test_missing_messaging_schema (self ):
222
+ def test_missing_messaging_schema_header (self , caplog ):
191
223
"""Assert the default schema is used when messaging schema is missing."""
192
224
message_dict = {
193
225
"id" : "test id" ,
@@ -198,6 +230,27 @@ def test_missing_messaging_schema(self):
198
230
}
199
231
test_message = message .load_message (message_dict )
200
232
assert isinstance (test_message , message .Message )
233
+ assert caplog .messages == []
234
+
235
+ def test_missing_messaging_schema (self , caplog ):
236
+ """Assert a helpful message is logged when the schema is missing."""
237
+ message_dict = {
238
+ "id" : "test id" ,
239
+ "topic" : "test topic" ,
240
+ "headers" : {
241
+ "fedora_messaging_schema" : "dummy" ,
242
+ "fedora_messaging_schema_package" : "dummy-package" ,
243
+ "fedora_messaging_severity" : 30 ,
244
+ },
245
+ "body" : {"test_key" : "test_value" },
246
+ "queue" : "test queue" ,
247
+ }
248
+ test_message = message .load_message (message_dict )
249
+ assert isinstance (test_message , message .Message )
250
+ assert caplog .messages == [
251
+ 'The schema "dummy" is not in the schema registry! You can install the missing schema '
252
+ "from package 'dummy-package'. Falling back to the default schema..."
253
+ ]
201
254
202
255
def test_missing_body (self ):
203
256
"""Assert proper exception is raised when body is missing."""
@@ -366,13 +419,16 @@ def test_properties_default(self):
366
419
assert "sent-at" in msg ._properties .headers
367
420
assert "fedora_messaging_schema" in msg ._properties .headers
368
421
assert msg ._properties .headers ["fedora_messaging_schema" ] == "base.message"
422
+ assert "fedora_messaging_schema_package" in msg ._properties .headers
423
+ assert msg ._properties .headers ["fedora_messaging_schema_package" ] == "fedora_messaging"
369
424
370
425
def test_headers (self ):
371
426
msg = message .Message (headers = {"foo" : "bar" })
372
427
assert "foo" in msg ._properties .headers
373
428
assert msg ._properties .headers ["foo" ] == "bar"
374
- # The fedora_messaging_schema key must also be added when headers are given.
429
+ # The fedora_messaging_schema keys must also be added when headers are given.
375
430
assert msg ._properties .headers ["fedora_messaging_schema" ] == "base.message"
431
+ assert msg ._properties .headers ["fedora_messaging_schema_package" ] == "fedora_messaging"
376
432
377
433
def test_severity_default_header_set (self ):
378
434
"""Assert the default severity is placed in the header if unspecified."""
@@ -526,9 +582,16 @@ def flatpaks(self):
526
582
527
583
528
584
@mock .patch .dict (message ._class_to_schema_name , {CustomMessage : "custom_id" })
585
+ @mock .patch .dict (message ._schema_name_to_package , {"custom_id" : "custom-package" })
529
586
class TestCustomMessage :
530
587
"""Tests for a Message subclass that provides filter headers"""
531
588
589
+ def test_schema_headers (self ):
590
+ """Assert schema name and package are placed in the message headers."""
591
+ msg = CustomMessage (body = {})
592
+ assert msg ._headers .get ("fedora_messaging_schema" ) == "custom_id"
593
+ assert msg ._headers .get ("fedora_messaging_schema_package" ) == "custom-package"
594
+
532
595
def test_usernames (self ):
533
596
"""Assert usernames are placed in the message headers."""
534
597
msg = CustomMessage (body = {"users" : ["jcline" , "abompard" ]})
@@ -656,3 +719,7 @@ def test_get_name_autoload_once(self):
656
719
with mock .patch .dict (message ._class_to_schema_name , {}, clear = True ):
657
720
with pytest .raises (TypeError ):
658
721
message .get_name ("this.is.not.an.entrypoint" )
722
+
723
+ def test_get_distribution_from_module (self ):
724
+ """Assert getting the distribution from a non-existing module does not crash."""
725
+ assert message ._get_distribution_from_module ("does.not.exist" ) is None
0 commit comments