2020-04-22 16:34:31 +03:00
|
|
|
#
|
2023-11-21 23:29:58 +03:00
|
|
|
# This file is licensed under the Affero General Public License (AGPL) version 3.
|
|
|
|
#
|
|
|
|
# Copyright (C) 2023 New Vector, Ltd
|
|
|
|
#
|
|
|
|
# This program is free software: you can redistribute it and/or modify
|
|
|
|
# it under the terms of the GNU Affero General Public License as
|
|
|
|
# published by the Free Software Foundation, either version 3 of the
|
|
|
|
# License, or (at your option) any later version.
|
|
|
|
#
|
|
|
|
# See the GNU Affero General Public License for more details:
|
|
|
|
# <https://www.gnu.org/licenses/agpl-3.0.html>.
|
|
|
|
#
|
|
|
|
# Originally licensed under the Apache License, Version 2.0:
|
|
|
|
# <http://www.apache.org/licenses/LICENSE-2.0>.
|
|
|
|
#
|
|
|
|
# [This file includes modifications made by New Vector Limited]
|
2020-04-22 16:34:31 +03:00
|
|
|
#
|
|
|
|
#
|
|
|
|
from synapse.replication.tcp.commands import (
|
|
|
|
RdataCommand,
|
|
|
|
ReplicateCommand,
|
|
|
|
parse_command_from_line,
|
|
|
|
)
|
|
|
|
|
|
|
|
from tests.unittest import TestCase
|
|
|
|
|
|
|
|
|
|
|
|
class ParseCommandTestCase(TestCase):
|
2023-02-06 17:55:00 +03:00
|
|
|
def test_parse_one_word_command(self) -> None:
|
2020-04-22 16:34:31 +03:00
|
|
|
line = "REPLICATE"
|
|
|
|
cmd = parse_command_from_line(line)
|
|
|
|
self.assertIsInstance(cmd, ReplicateCommand)
|
|
|
|
|
2023-02-06 17:55:00 +03:00
|
|
|
def test_parse_rdata(self) -> None:
|
2020-04-29 18:23:08 +03:00
|
|
|
line = 'RDATA events master 6287863 ["ev", ["$eventid", "!roomid", "type", null, null, null]]'
|
2020-04-22 16:34:31 +03:00
|
|
|
cmd = parse_command_from_line(line)
|
2020-05-18 12:43:05 +03:00
|
|
|
assert isinstance(cmd, RdataCommand)
|
2020-04-22 16:34:31 +03:00
|
|
|
self.assertEqual(cmd.stream_name, "events")
|
2020-04-29 18:23:08 +03:00
|
|
|
self.assertEqual(cmd.instance_name, "master")
|
2020-04-22 16:34:31 +03:00
|
|
|
self.assertEqual(cmd.token, 6287863)
|
|
|
|
|
2023-02-06 17:55:00 +03:00
|
|
|
def test_parse_rdata_batch(self) -> None:
|
2020-04-29 18:23:08 +03:00
|
|
|
line = 'RDATA presence master batch ["@foo:example.com", "online"]'
|
2020-04-22 16:34:31 +03:00
|
|
|
cmd = parse_command_from_line(line)
|
2020-05-18 12:43:05 +03:00
|
|
|
assert isinstance(cmd, RdataCommand)
|
2020-04-22 16:34:31 +03:00
|
|
|
self.assertEqual(cmd.stream_name, "presence")
|
2020-04-29 18:23:08 +03:00
|
|
|
self.assertEqual(cmd.instance_name, "master")
|
2020-04-22 16:34:31 +03:00
|
|
|
self.assertIsNone(cmd.token)
|