1*61c4878aSAndroid Build Coastguard Worker#!/usr/bin/env python3 2*61c4878aSAndroid Build Coastguard Worker# Copyright 2020 The Pigweed Authors 3*61c4878aSAndroid Build Coastguard Worker# 4*61c4878aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not 5*61c4878aSAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of 6*61c4878aSAndroid Build Coastguard Worker# the License at 7*61c4878aSAndroid Build Coastguard Worker# 8*61c4878aSAndroid Build Coastguard Worker# https://www.apache.org/licenses/LICENSE-2.0 9*61c4878aSAndroid Build Coastguard Worker# 10*61c4878aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 11*61c4878aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12*61c4878aSAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13*61c4878aSAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under 14*61c4878aSAndroid Build Coastguard Worker# the License. 15*61c4878aSAndroid Build Coastguard Worker"""Tests encoding HDLC frames.""" 16*61c4878aSAndroid Build Coastguard Worker 17*61c4878aSAndroid Build Coastguard Workerimport unittest 18*61c4878aSAndroid Build Coastguard Worker 19*61c4878aSAndroid Build Coastguard Workerfrom pw_hdlc import encode 20*61c4878aSAndroid Build Coastguard Workerfrom pw_hdlc import protocol 21*61c4878aSAndroid Build Coastguard Workerfrom pw_hdlc.protocol import frame_check_sequence as _fcs 22*61c4878aSAndroid Build Coastguard Worker 23*61c4878aSAndroid Build Coastguard WorkerFLAG = bytes([protocol.FLAG]) 24*61c4878aSAndroid Build Coastguard Worker 25*61c4878aSAndroid Build Coastguard Worker 26*61c4878aSAndroid Build Coastguard Workerdef _with_fcs(data: bytes) -> bytes: 27*61c4878aSAndroid Build Coastguard Worker return data + _fcs(data) 28*61c4878aSAndroid Build Coastguard Worker 29*61c4878aSAndroid Build Coastguard Worker 30*61c4878aSAndroid Build Coastguard Workerclass TestEncodeUIFrame(unittest.TestCase): 31*61c4878aSAndroid Build Coastguard Worker """Tests Encoding bytes with different arguments using a custom serial.""" 32*61c4878aSAndroid Build Coastguard Worker 33*61c4878aSAndroid Build Coastguard Worker def test_empty(self): 34*61c4878aSAndroid Build Coastguard Worker self.assertEqual( 35*61c4878aSAndroid Build Coastguard Worker encode.ui_frame(0, b''), FLAG + _with_fcs(b'\x01\x03') + FLAG 36*61c4878aSAndroid Build Coastguard Worker ) 37*61c4878aSAndroid Build Coastguard Worker self.assertEqual( 38*61c4878aSAndroid Build Coastguard Worker encode.ui_frame(0x1A, b''), FLAG + _with_fcs(b'\x35\x03') + FLAG 39*61c4878aSAndroid Build Coastguard Worker ) 40*61c4878aSAndroid Build Coastguard Worker 41*61c4878aSAndroid Build Coastguard Worker def test_1byte(self): 42*61c4878aSAndroid Build Coastguard Worker self.assertEqual( 43*61c4878aSAndroid Build Coastguard Worker encode.ui_frame(0, b'A'), FLAG + _with_fcs(b'\x01\x03A') + FLAG 44*61c4878aSAndroid Build Coastguard Worker ) 45*61c4878aSAndroid Build Coastguard Worker 46*61c4878aSAndroid Build Coastguard Worker def test_multibyte(self): 47*61c4878aSAndroid Build Coastguard Worker self.assertEqual( 48*61c4878aSAndroid Build Coastguard Worker encode.ui_frame(0, b'123456789'), 49*61c4878aSAndroid Build Coastguard Worker FLAG + _with_fcs(b'\x01\x03123456789') + FLAG, 50*61c4878aSAndroid Build Coastguard Worker ) 51*61c4878aSAndroid Build Coastguard Worker 52*61c4878aSAndroid Build Coastguard Worker def test_multibyte_address(self): 53*61c4878aSAndroid Build Coastguard Worker self.assertEqual( 54*61c4878aSAndroid Build Coastguard Worker encode.ui_frame(128, b'123456789'), 55*61c4878aSAndroid Build Coastguard Worker FLAG + _with_fcs(b'\x00\x03\x03123456789') + FLAG, 56*61c4878aSAndroid Build Coastguard Worker ) 57*61c4878aSAndroid Build Coastguard Worker 58*61c4878aSAndroid Build Coastguard Worker def test_escape(self): 59*61c4878aSAndroid Build Coastguard Worker self.assertEqual( 60*61c4878aSAndroid Build Coastguard Worker encode.ui_frame(0x3E, b'\x7d'), 61*61c4878aSAndroid Build Coastguard Worker FLAG + b'\x7d\x5d\x03\x7d\x5d' + _fcs(b'\x7d\x03\x7d') + FLAG, 62*61c4878aSAndroid Build Coastguard Worker ) 63*61c4878aSAndroid Build Coastguard Worker self.assertEqual( 64*61c4878aSAndroid Build Coastguard Worker encode.ui_frame(0x3E, b'A\x7e\x7dBC'), 65*61c4878aSAndroid Build Coastguard Worker FLAG 66*61c4878aSAndroid Build Coastguard Worker + b'\x7d\x5d\x03A\x7d\x5e\x7d\x5dBC' 67*61c4878aSAndroid Build Coastguard Worker + _fcs(b'\x7d\x03A\x7e\x7dBC') 68*61c4878aSAndroid Build Coastguard Worker + FLAG, 69*61c4878aSAndroid Build Coastguard Worker ) 70*61c4878aSAndroid Build Coastguard Worker 71*61c4878aSAndroid Build Coastguard Worker 72*61c4878aSAndroid Build Coastguard Workerif __name__ == '__main__': 73*61c4878aSAndroid Build Coastguard Worker unittest.main() 74