| # Copyright 2020 The ChromiumOS Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Tests for message_util.""" |
| |
| import os |
| |
| from chromite.api import message_util |
| from chromite.api.gen.chromite.api import build_api_test_pb2 |
| from chromite.lib import cros_test_lib |
| |
| |
| class JsonSerializerTest(cros_test_lib.TestCase): |
| """Tests for the JSON serializer.""" |
| |
| def test_serialization(self): |
| """Test json format serialization/deserialization.""" |
| serializer = message_util.JsonSerializer() |
| |
| # Build a message. |
| msg = build_api_test_pb2.TestRequestMessage() |
| msg.id = "foo" |
| |
| # Round trip the message contents through the serializer. |
| serialized = serializer.serialize(msg) |
| deserialized = build_api_test_pb2.TestRequestMessage() |
| serializer.deserialize(serialized, deserialized) |
| |
| # Create an identical message manually. |
| source = '{"id":"foo"}' |
| deserialized2 = build_api_test_pb2.TestRequestMessage() |
| serializer.deserialize(source, deserialized2) |
| |
| # Make sure the round tripped data is equal, and matches the manually |
| # constructed version. |
| self.assertEqual(deserialized, msg) |
| self.assertEqual(deserialized, deserialized2) |
| |
| |
| class BinarySerializerTest(cros_test_lib.TestCase): |
| """Tests for the binary serializer.""" |
| |
| def test_serialization(self): |
| """Test binary format serialization/deserialization.""" |
| serializer = message_util.BinarySerializer() |
| |
| # Build a message. |
| msg = build_api_test_pb2.TestRequestMessage() |
| msg.id = "foo" |
| |
| # Round trip the message contents through the serializer. |
| serialized = serializer.serialize(msg) |
| deserialized = build_api_test_pb2.TestRequestMessage() |
| serializer.deserialize(serialized, deserialized) |
| |
| # Make sure the round tripped data is unchanged. |
| self.assertEqual(msg, deserialized) |
| |
| |
| class MessageHandlerTest(cros_test_lib.TempDirTestCase): |
| """MessageHandler tests.""" |
| |
| def test_binary_serialization(self): |
| """Test binary serialization/deserialization.""" |
| msg_path = os.path.join(self.tempdir, "proto") |
| |
| # Use the message handler configured in the module to avoid config |
| # drift. |
| handler = message_util.get_message_handler( |
| msg_path, message_util.FORMAT_BINARY |
| ) |
| |
| msg = build_api_test_pb2.TestRequestMessage() |
| msg.id = "foo" |
| |
| # Round trip the data. |
| self.assertNotExists(msg_path) |
| handler.write_from(msg) |
| self.assertExists(msg_path) |
| |
| deserialized = build_api_test_pb2.TestRequestMessage() |
| handler.read_into(deserialized) |
| |
| # Make sure the data has not mutated. |
| self.assertEqual(msg, deserialized) |
| |
| def test_json_serialization(self): |
| """Test json serialization/deserialization.""" |
| msg_path = os.path.join(self.tempdir, "proto") |
| |
| # Use the message handler configured in the module to avoid config |
| # drift. |
| handler = message_util.get_message_handler( |
| msg_path, message_util.FORMAT_JSON |
| ) |
| |
| msg = build_api_test_pb2.TestRequestMessage() |
| msg.id = "foo" |
| |
| # Round trip the data. |
| self.assertNotExists(msg_path) |
| handler.write_from(msg) |
| self.assertExists(msg_path) |
| |
| deserialized = build_api_test_pb2.TestRequestMessage() |
| handler.read_into(deserialized) |
| |
| # Make sure the data has not mutated. |
| self.assertEqual(msg, deserialized) |