blob: caf22a1c9a35417bee0dd61eabe2c7aadd375b57 [file] [log] [blame]
Mike Frysingerf1ba7ad2022-09-12 05:42:57 -04001# Copyright 2020 The ChromiumOS Authors
Alex Kleine191ed62020-02-27 15:59:55 -07002# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""Tests for message_util."""
6
Alex Kleine191ed62020-02-27 15:59:55 -07007import os
8
9from chromite.api import message_util
10from chromite.api.gen.chromite.api import build_api_test_pb2
11from chromite.lib import cros_test_lib
12
13
Alex Kleine191ed62020-02-27 15:59:55 -070014class JsonSerializerTest(cros_test_lib.TestCase):
Alex Klein1699fab2022-09-08 08:46:06 -060015 """Tests for the JSON serializer."""
Alex Kleine191ed62020-02-27 15:59:55 -070016
Alex Klein1699fab2022-09-08 08:46:06 -060017 def test_serialization(self):
18 """Test json format serialization/deserialization."""
19 serializer = message_util.JsonSerializer()
Alex Kleine191ed62020-02-27 15:59:55 -070020
Alex Klein1699fab2022-09-08 08:46:06 -060021 # Build a message.
22 msg = build_api_test_pb2.TestRequestMessage()
23 msg.id = "foo"
Alex Kleine191ed62020-02-27 15:59:55 -070024
Alex Klein1699fab2022-09-08 08:46:06 -060025 # Round trip the message contents through the serializer.
26 serialized = serializer.serialize(msg)
27 deserialized = build_api_test_pb2.TestRequestMessage()
28 serializer.deserialize(serialized, deserialized)
Alex Kleine191ed62020-02-27 15:59:55 -070029
Alex Klein1699fab2022-09-08 08:46:06 -060030 # Create an identical message manually.
31 source = '{"id":"foo"}'
32 deserialized2 = build_api_test_pb2.TestRequestMessage()
33 serializer.deserialize(source, deserialized2)
Alex Kleine191ed62020-02-27 15:59:55 -070034
Alex Klein1699fab2022-09-08 08:46:06 -060035 # Make sure the round tripped data is equal, and matches the manually
36 # constructed version.
37 self.assertEqual(deserialized, msg)
38 self.assertEqual(deserialized, deserialized2)
Alex Kleine191ed62020-02-27 15:59:55 -070039
40
41class BinarySerializerTest(cros_test_lib.TestCase):
Alex Klein1699fab2022-09-08 08:46:06 -060042 """Tests for the binary serializer."""
Alex Kleine191ed62020-02-27 15:59:55 -070043
Alex Klein1699fab2022-09-08 08:46:06 -060044 def test_serialization(self):
45 """Test binary format serialization/deserialization."""
46 serializer = message_util.BinarySerializer()
Alex Kleine191ed62020-02-27 15:59:55 -070047
Alex Klein1699fab2022-09-08 08:46:06 -060048 # Build a message.
49 msg = build_api_test_pb2.TestRequestMessage()
50 msg.id = "foo"
Alex Kleine191ed62020-02-27 15:59:55 -070051
Alex Klein1699fab2022-09-08 08:46:06 -060052 # Round trip the message contents through the serializer.
53 serialized = serializer.serialize(msg)
54 deserialized = build_api_test_pb2.TestRequestMessage()
55 serializer.deserialize(serialized, deserialized)
Alex Kleine191ed62020-02-27 15:59:55 -070056
Alex Klein1699fab2022-09-08 08:46:06 -060057 # Make sure the round tripped data is unchanged.
58 self.assertEqual(msg, deserialized)
Alex Kleine191ed62020-02-27 15:59:55 -070059
60
61class MessageHandlerTest(cros_test_lib.TempDirTestCase):
Alex Klein1699fab2022-09-08 08:46:06 -060062 """MessageHandler tests."""
Alex Kleine191ed62020-02-27 15:59:55 -070063
Alex Klein1699fab2022-09-08 08:46:06 -060064 def test_binary_serialization(self):
65 """Test binary serialization/deserialization."""
66 msg_path = os.path.join(self.tempdir, "proto")
Alex Kleine191ed62020-02-27 15:59:55 -070067
Alex Klein1699fab2022-09-08 08:46:06 -060068 # Use the message handler configured in the module to avoid config drift.
69 handler = message_util.get_message_handler(
70 msg_path, message_util.FORMAT_BINARY
71 )
Alex Kleine191ed62020-02-27 15:59:55 -070072
Alex Klein1699fab2022-09-08 08:46:06 -060073 msg = build_api_test_pb2.TestRequestMessage()
74 msg.id = "foo"
Alex Kleine191ed62020-02-27 15:59:55 -070075
Alex Klein1699fab2022-09-08 08:46:06 -060076 # Round trip the data.
77 self.assertNotExists(msg_path)
78 handler.write_from(msg)
79 self.assertExists(msg_path)
Alex Kleine191ed62020-02-27 15:59:55 -070080
Alex Klein1699fab2022-09-08 08:46:06 -060081 deserialized = build_api_test_pb2.TestRequestMessage()
82 handler.read_into(deserialized)
Alex Kleine191ed62020-02-27 15:59:55 -070083
Alex Klein1699fab2022-09-08 08:46:06 -060084 # Make sure the data has not mutated.
85 self.assertEqual(msg, deserialized)
Alex Kleine191ed62020-02-27 15:59:55 -070086
Alex Klein1699fab2022-09-08 08:46:06 -060087 def test_json_serialization(self):
88 """Test json serialization/deserialization."""
89 msg_path = os.path.join(self.tempdir, "proto")
Alex Kleine191ed62020-02-27 15:59:55 -070090
Alex Klein1699fab2022-09-08 08:46:06 -060091 # Use the message handler configured in the module to avoid config drift.
92 handler = message_util.get_message_handler(
93 msg_path, message_util.FORMAT_JSON
94 )
Alex Kleine191ed62020-02-27 15:59:55 -070095
Alex Klein1699fab2022-09-08 08:46:06 -060096 msg = build_api_test_pb2.TestRequestMessage()
97 msg.id = "foo"
Alex Kleine191ed62020-02-27 15:59:55 -070098
Alex Klein1699fab2022-09-08 08:46:06 -060099 # Round trip the data.
100 self.assertNotExists(msg_path)
101 handler.write_from(msg)
102 self.assertExists(msg_path)
Alex Kleine191ed62020-02-27 15:59:55 -0700103
Alex Klein1699fab2022-09-08 08:46:06 -0600104 deserialized = build_api_test_pb2.TestRequestMessage()
105 handler.read_into(deserialized)
Alex Kleine191ed62020-02-27 15:59:55 -0700106
Alex Klein1699fab2022-09-08 08:46:06 -0600107 # Make sure the data has not mutated.
108 self.assertEqual(msg, deserialized)