From 9a5aa8b7209308a44e463632132c2173216379a6 Mon Sep 17 00:00:00 2001 From: Bernard Cafarelli Date: Wed, 8 Jul 2020 13:50:17 +0200 Subject: [PATCH] Fix sockaddr lib with python 3 Padding did not work and this lib did not have tests Sample failure seen in neutron-dynamic-routing: neutron-bgp-dragent[29325]: TypeError: can't concat str to bytes Story: 2007910 Task: 40311 Change-Id: If616980b2c6d7303cdc5d4f5e7247d63e4c34939 --- os_ken/lib/sockaddr.py | 2 +- os_ken/tests/unit/lib/__init__.py | 0 os_ken/tests/unit/lib/test_sockaddr.py | 54 ++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 os_ken/tests/unit/lib/__init__.py create mode 100644 os_ken/tests/unit/lib/test_sockaddr.py diff --git a/os_ken/lib/sockaddr.py b/os_ken/lib/sockaddr.py index 44371cfa..b0fa4d8b 100644 --- a/os_ken/lib/sockaddr.py +++ b/os_ken/lib/sockaddr.py @@ -54,7 +54,7 @@ def _hdr(ss_len, af): def _pad_to(data, total_len): pad_len = total_len - len(data) - return data + pad_len * '\0' + return data + pad_len * b'\0' def sa_in4(addr, port=0): diff --git a/os_ken/tests/unit/lib/__init__.py b/os_ken/tests/unit/lib/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/os_ken/tests/unit/lib/test_sockaddr.py b/os_ken/tests/unit/lib/test_sockaddr.py new file mode 100644 index 00000000..33e5e626 --- /dev/null +++ b/os_ken/tests/unit/lib/test_sockaddr.py @@ -0,0 +1,54 @@ +# Copyright 2020 Red Hat, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import unittest +import logging +import platform +from nose.tools import eq_ + +from os_ken.lib import sockaddr + +system = platform.system() + + +class Test_sockaddr(unittest.TestCase): + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_sockaddr_linux_sa_in4(self): + if system != 'Linux': + return + + addr = '127.0.0.1' + expected_result = (b'\x02\x00\x00\x00' + b'\x7f\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00') + eq_(expected_result, sockaddr.sa_in4(addr)) + + def test_sockaddr_linux_sa_in6(self): + if system != 'Linux': + return + + addr = 'dead:beef::1' + expected_result = (b'\n\x00\x00\x00\x00\x00\x00\x00\xde\xad\xbe\xef' + b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00') + eq_(expected_result, sockaddr.sa_in6(addr)) + + def test_sockaddr_sa_to_ss(self): + addr = b'\x01' + expected_result = b'\x01' + 127 * b'\x00' + eq_(expected_result, sockaddr.sa_to_ss(addr))