| # 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) |