blob: 11ae6762522f61b96aa5cad091d30e450b29a1f8 [file] [log] [blame]
Wyatt Hepler5cfde332020-06-30 08:53:44 -07001#!/usr/bin/env python3
2# Copyright 2020 The Pigweed Authors
3#
4# Licensed under the Apache License, Version 2.0 (the "License"); you may not
5# use this file except in compliance with the License. You may obtain a copy of
6# the License at
7#
8# https://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13# License for the specific language governing permissions and limitations under
14# the License.
15"""Tests creating pw_rpc client."""
16
17import unittest
18
Wyatt Hepler8ce90132020-12-03 10:57:20 -080019from pw_status import Status
20
Wyatt Heplerba325e42021-03-08 14:23:34 -080021from pw_rpc.internal.packet_pb2 import PacketType, RpcPacket
Wyatt Hepler5cfde332020-06-30 08:53:44 -070022from pw_rpc import packets
23
Wyatt Heplera2970c52021-02-02 14:47:22 -080024_TEST_REQUEST = RpcPacket(type=PacketType.REQUEST,
Wyatt Heplera56ab152020-08-12 17:06:31 -070025 channel_id=1,
26 service_id=2,
27 method_id=3,
28 payload=RpcPacket(status=321).SerializeToString())
Wyatt Hepler5cfde332020-06-30 08:53:44 -070029
30
31class PacketsTest(unittest.TestCase):
Wyatt Hepler0f262352020-07-29 09:51:27 -070032 """Tests for packet encoding and decoding."""
Wyatt Heplerdd4cce92020-07-17 12:24:23 -070033 def test_encode_request(self):
Wyatt Heplera56ab152020-08-12 17:06:31 -070034 data = packets.encode_request((1, 2, 3), RpcPacket(status=321))
35 packet = RpcPacket()
Wyatt Hepler5cfde332020-06-30 08:53:44 -070036 packet.ParseFromString(data)
37
Wyatt Heplerdd4cce92020-07-17 12:24:23 -070038 self.assertEqual(_TEST_REQUEST, packet)
39
Wyatt Hepler0f262352020-07-29 09:51:27 -070040 def test_encode_response(self):
Wyatt Heplera2970c52021-02-02 14:47:22 -080041 response = RpcPacket(type=PacketType.RESPONSE,
Wyatt Heplera56ab152020-08-12 17:06:31 -070042 channel_id=1,
43 service_id=2,
44 method_id=3,
45 payload=RpcPacket(status=321).SerializeToString())
Wyatt Hepler0f262352020-07-29 09:51:27 -070046
Wyatt Heplera56ab152020-08-12 17:06:31 -070047 data = packets.encode_response((1, 2, 3), RpcPacket(status=321))
48 packet = RpcPacket()
Wyatt Hepler0f262352020-07-29 09:51:27 -070049 packet.ParseFromString(data)
50
51 self.assertEqual(response, packet)
52
Wyatt Heplerdd4cce92020-07-17 12:24:23 -070053 def test_encode_cancel(self):
54 data = packets.encode_cancel((9, 8, 7))
55
Wyatt Heplera56ab152020-08-12 17:06:31 -070056 packet = RpcPacket()
Wyatt Heplerdd4cce92020-07-17 12:24:23 -070057 packet.ParseFromString(data)
58
59 self.assertEqual(
60 packet,
Wyatt Heplera9211162021-06-12 15:40:11 -070061 RpcPacket(type=PacketType.CANCEL,
Wyatt Heplera56ab152020-08-12 17:06:31 -070062 channel_id=9,
63 service_id=8,
64 method_id=7))
Wyatt Hepler5cfde332020-06-30 08:53:44 -070065
Wyatt Hepler0f262352020-07-29 09:51:27 -070066 def test_encode_client_error(self):
67 data = packets.encode_client_error(_TEST_REQUEST, Status.NOT_FOUND)
68
Wyatt Heplera56ab152020-08-12 17:06:31 -070069 packet = RpcPacket()
Wyatt Hepler0f262352020-07-29 09:51:27 -070070 packet.ParseFromString(data)
71
72 self.assertEqual(
73 packet,
Wyatt Heplera2970c52021-02-02 14:47:22 -080074 RpcPacket(type=PacketType.CLIENT_ERROR,
Wyatt Heplera56ab152020-08-12 17:06:31 -070075 channel_id=1,
76 service_id=2,
77 method_id=3,
78 status=Status.NOT_FOUND.value))
Wyatt Hepler0f262352020-07-29 09:51:27 -070079
Wyatt Hepler5cfde332020-06-30 08:53:44 -070080 def test_decode(self):
Wyatt Heplerdd4cce92020-07-17 12:24:23 -070081 self.assertEqual(_TEST_REQUEST,
82 packets.decode(_TEST_REQUEST.SerializeToString()))
Wyatt Hepler5cfde332020-06-30 08:53:44 -070083
Wyatt Hepler0f262352020-07-29 09:51:27 -070084 def test_for_server(self):
85 self.assertTrue(packets.for_server(_TEST_REQUEST))
86
87 self.assertFalse(
88 packets.for_server(
Wyatt Heplera2970c52021-02-02 14:47:22 -080089 RpcPacket(type=PacketType.RESPONSE,
Wyatt Heplera56ab152020-08-12 17:06:31 -070090 channel_id=1,
91 service_id=2,
92 method_id=3,
93 payload=RpcPacket(status=321).SerializeToString())))
Wyatt Hepler0f262352020-07-29 09:51:27 -070094
Wyatt Hepler5cfde332020-06-30 08:53:44 -070095
96if __name__ == '__main__':
97 unittest.main()