Skip to content

Commit 54308a6

Browse files
authored
Merge pull request #975 from Aiven-Open/jjaakola-aiven-correct-schema-compatibility-response-field
fix: return "messages" instead "incompatibilities" from compatibility API
2 parents 458b1a6 + a0c664d commit 54308a6

3 files changed

Lines changed: 8 additions & 9 deletions

File tree

src/karapace/schema_registry_apis.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -412,8 +412,7 @@ async def compatibility_check(
412412
result = SchemaCompatibility.check_compatibility(old_schema, new_schema, compatibility_mode)
413413

414414
if is_incompatible(result):
415-
maybe_truncated_error = ", ".join(result.messages)[:300]
416-
self.r({"is_compatible": False, "incompatibilities": maybe_truncated_error}, content_type)
415+
self.r({"is_compatible": False, "messages": list(result.messages)}, content_type)
417416
self.r({"is_compatible": True}, content_type)
418417

419418
async def schemas_list(self, content_type: str, *, request: HTTPRequest, user: User | None = None):

tests/integration/test_schema.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ async def test_compatibility_endpoint(registry_async_client: Client, trail: str)
333333
)
334334
assert res.status_code == 200
335335
assert res.json().get("is_compatible") is False
336-
assert res.json().get("incompatibilities") == "reader type: string not compatible with writer type: int"
336+
assert res.json().get("messages") == ["reader type: string not compatible with writer type: int"]
337337

338338

339339
@pytest.mark.parametrize("trail", ["", "/"])

tests/integration/test_schema_compatibility.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class SchemaCompatibilityTestCase(BaseTestCase):
4444
register_baseline_schemas: SchemaRegitrationFunc
4545
expected_is_compatible: bool | None
4646
expected_status_code: int
47-
expected_incompatibilities: str | None
47+
expected_incompatibilities: list[str] | None
4848

4949

5050
async def _register_baseline_schemas_no_incompatibilities(registry_async_client: Client, subject: Subject) -> None:
@@ -149,7 +149,7 @@ async def _set_compatibility_mode(registry_async_client: Client, subject: Subjec
149149
new_schema=json.dumps(schema_int),
150150
expected_is_compatible=False,
151151
expected_status_code=200,
152-
expected_incompatibilities="reader type: int not compatible with writer type: double",
152+
expected_incompatibilities=["reader type: int not compatible with writer type: double"],
153153
),
154154
# Case 3
155155
# Same as previous case, but in non-transitive mode
@@ -161,7 +161,7 @@ async def _set_compatibility_mode(registry_async_client: Client, subject: Subjec
161161
new_schema=json.dumps(schema_int),
162162
expected_is_compatible=False,
163163
expected_status_code=200,
164-
expected_incompatibilities="reader type: int not compatible with writer type: string",
164+
expected_incompatibilities=["reader type: int not compatible with writer type: string"],
165165
),
166166
# Case 4
167167
# Same as case 2, but with a deleted schema among baseline ones
@@ -175,7 +175,7 @@ async def _set_compatibility_mode(registry_async_client: Client, subject: Subjec
175175
new_schema=json.dumps(schema_int),
176176
expected_is_compatible=False,
177177
expected_status_code=200,
178-
expected_incompatibilities="reader type: int not compatible with writer type: double",
178+
expected_incompatibilities=["reader type: int not compatible with writer type: double"],
179179
),
180180
# Case 5
181181
# Same as case 3, but with a deleted schema among baseline ones
@@ -188,7 +188,7 @@ async def _set_compatibility_mode(registry_async_client: Client, subject: Subjec
188188
new_schema=json.dumps(schema_int),
189189
expected_is_compatible=False,
190190
expected_status_code=200,
191-
expected_incompatibilities="reader type: int not compatible with writer type: string",
191+
expected_incompatibilities=["reader type: int not compatible with writer type: string"],
192192
),
193193
# Case 6
194194
# A new schema and no baseline schemas
@@ -232,4 +232,4 @@ async def test_schema_compatibility(test_case: SchemaCompatibilityTestCase, regi
232232

233233
assert res.status_code == test_case.expected_status_code
234234
assert res.json().get("is_compatible") == test_case.expected_is_compatible
235-
assert res.json().get("incompatibilities", None) == test_case.expected_incompatibilities
235+
assert res.json().get("messages") == test_case.expected_incompatibilities

0 commit comments

Comments
 (0)