Add test coverage for cgcs-patch/utils.py
This update adds cgcs-patch test cases to cover all utility functions in utils.py. Adding the test cases showed a python3 issue with the if_nametoindex utility function. In python3, this functionality is provided by the socket module. In python2, however, the function must be loaded through the libc library. In order to support the python3 test case execution, and prepare for moving to python3, the wrapper wrapper function will use the socket module function for python3 and the libc function otherwise. Change-Id: I42d4966154bf22607246060acf31c4792b0e2bbe Story: 2005939 Task: 34776 Signed-off-by: Don Penney <don.penney@windriver.com>
This commit is contained in:
parent
f27f1c1539
commit
d9c2230050
|
@ -0,0 +1,132 @@
|
|||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
# Copyright (c) 2019 Wind River Systems, Inc.
|
||||
#
|
||||
|
||||
import mock
|
||||
import socket
|
||||
import testtools
|
||||
|
||||
import cgcs_patch.constants
|
||||
import cgcs_patch.utils
|
||||
|
||||
|
||||
class CgcsPatchUtilsTestCase(testtools.TestCase):
|
||||
|
||||
def test_if_nametoindex_loopback(self):
|
||||
result = cgcs_patch.utils.if_nametoindex('lo')
|
||||
self.assertGreater(result, 0)
|
||||
|
||||
def test_if_nametoindex_failure(self):
|
||||
result = cgcs_patch.utils.if_nametoindex('xfakeifx')
|
||||
self.assertEqual(result, 0)
|
||||
|
||||
def test_gethostbyname(self):
|
||||
result = cgcs_patch.utils.gethostbyname('localhost')
|
||||
print("gethostbyname returned %s for localhost" % result)
|
||||
self.assertIn(result, ['127.0.0.1', '::1'])
|
||||
|
||||
def test_gethostbyname_failure(self):
|
||||
result = cgcs_patch.utils.gethostbyname('xfakehostx')
|
||||
print("gethostbyname returned %s for xfakehostx" % result)
|
||||
self.assertIsNone(result)
|
||||
|
||||
@mock.patch('cgcs_patch.utils.gethostbyname')
|
||||
def test_get_management_version_ipv4(self, mock_gethostbyname):
|
||||
mock_gethostbyname.return_value = '192.168.204.2'
|
||||
expected_result = cgcs_patch.constants.ADDRESS_VERSION_IPV4
|
||||
|
||||
result = cgcs_patch.utils.get_management_version()
|
||||
self.assertEqual(expected_result, result)
|
||||
|
||||
@mock.patch('cgcs_patch.utils.gethostbyname')
|
||||
def test_get_management_version_ipv6(self, mock_gethostbyname):
|
||||
mock_gethostbyname.return_value = 'fe80::2e44:fdff:fe84:5479'
|
||||
expected_result = cgcs_patch.constants.ADDRESS_VERSION_IPV6
|
||||
|
||||
result = cgcs_patch.utils.get_management_version()
|
||||
self.assertEqual(expected_result, result)
|
||||
|
||||
@mock.patch('cgcs_patch.utils.gethostbyname')
|
||||
def test_get_management_version_ipv4_default(self, mock_gethostbyname):
|
||||
mock_gethostbyname.return_value = None
|
||||
expected_result = cgcs_patch.constants.ADDRESS_VERSION_IPV4
|
||||
|
||||
result = cgcs_patch.utils.get_management_version()
|
||||
self.assertEqual(expected_result, result)
|
||||
|
||||
@mock.patch('cgcs_patch.utils.gethostbyname')
|
||||
def test_get_management_family_ipv4(self, mock_gethostbyname):
|
||||
mock_gethostbyname.return_value = '192.168.204.2'
|
||||
expected_result = socket.AF_INET
|
||||
|
||||
result = cgcs_patch.utils.get_management_family()
|
||||
self.assertEqual(expected_result, result)
|
||||
|
||||
@mock.patch('cgcs_patch.utils.gethostbyname')
|
||||
def test_get_management_family_ipv6(self, mock_gethostbyname):
|
||||
mock_gethostbyname.return_value = 'fe80::2e44:fdff:fe84:5479'
|
||||
expected_result = socket.AF_INET6
|
||||
|
||||
result = cgcs_patch.utils.get_management_family()
|
||||
self.assertEqual(expected_result, result)
|
||||
|
||||
@mock.patch('cgcs_patch.utils.gethostbyname')
|
||||
def test_get_management_version_ipv4_int(self, mock_gethostbyname):
|
||||
mock_gethostbyname.return_value = 0xc0a8cc02
|
||||
expected_result = socket.AF_INET
|
||||
|
||||
result = cgcs_patch.utils.get_management_family()
|
||||
self.assertEqual(expected_result, result)
|
||||
|
||||
@mock.patch('cgcs_patch.utils.gethostbyname')
|
||||
def test_get_versioned_address_all_ipv4(self, mock_gethostbyname):
|
||||
mock_gethostbyname.return_value = '192.168.204.2'
|
||||
expected_result = '0.0.0.0'
|
||||
|
||||
result = cgcs_patch.utils.get_versioned_address_all()
|
||||
self.assertEqual(expected_result, result)
|
||||
|
||||
@mock.patch('cgcs_patch.utils.gethostbyname')
|
||||
def test_get_versioned_address_all_ipv6(self, mock_gethostbyname):
|
||||
mock_gethostbyname.return_value = 'fe80::2e44:fdff:fe84:5479'
|
||||
expected_result = '::'
|
||||
|
||||
result = cgcs_patch.utils.get_versioned_address_all()
|
||||
self.assertEqual(expected_result, result)
|
||||
|
||||
def test_ip_to_url_ipv4(self):
|
||||
ip = '192.168.204.2'
|
||||
expected_result = ip
|
||||
|
||||
result = cgcs_patch.utils.ip_to_url(ip)
|
||||
self.assertEqual(expected_result, result)
|
||||
|
||||
def test_ip_to_url_ipv6(self):
|
||||
ip = 'fe80::2e44:fdff:fe84:5479'
|
||||
expected_result = '[%s]' % ip
|
||||
|
||||
result = cgcs_patch.utils.ip_to_url(ip)
|
||||
self.assertEqual(expected_result, result)
|
||||
|
||||
def test_ip_to_url_invalid(self):
|
||||
ip = 'not-an-ip'
|
||||
expected_result = ip
|
||||
|
||||
result = cgcs_patch.utils.ip_to_url(ip)
|
||||
self.assertEqual(expected_result, result)
|
||||
|
||||
def test_ip_to_versioned_localhost_ipv4(self):
|
||||
ip = '192.168.204.2'
|
||||
expected_result = 'localhost'
|
||||
|
||||
result = cgcs_patch.utils.ip_to_versioned_localhost(ip)
|
||||
self.assertEqual(expected_result, result)
|
||||
|
||||
def test_ip_to_versioned_localhost_ipv6(self):
|
||||
ip = 'fe80::2e44:fdff:fe84:5479'
|
||||
expected_result = '::1'
|
||||
|
||||
result = cgcs_patch.utils.ip_to_versioned_localhost(ip)
|
||||
self.assertEqual(expected_result, result)
|
|
@ -1,5 +1,5 @@
|
|||
"""
|
||||
Copyright (c) 2016-2017 Wind River Systems, Inc.
|
||||
Copyright (c) 2016-2019 Wind River Systems, Inc.
|
||||
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
|
@ -9,14 +9,23 @@ from netaddr import IPAddress
|
|||
import cgcs_patch.constants as constants
|
||||
import socket
|
||||
|
||||
import ctypes
|
||||
import ctypes.util
|
||||
try:
|
||||
# Python3
|
||||
from socket import if_nametoindex as if_nametoindex_func
|
||||
except ImportError:
|
||||
# Python2
|
||||
import ctypes
|
||||
import ctypes.util
|
||||
|
||||
libc = ctypes.CDLL(ctypes.util.find_library('c'))
|
||||
libc = ctypes.CDLL(ctypes.util.find_library('c'))
|
||||
if_nametoindex_func = libc.if_nametoindex
|
||||
|
||||
|
||||
def if_nametoindex(name):
|
||||
return libc.if_nametoindex(name)
|
||||
try:
|
||||
return if_nametoindex_func(name)
|
||||
except Exception:
|
||||
return 0
|
||||
|
||||
|
||||
def gethostbyname(hostname):
|
||||
|
|
Loading…
Reference in New Issue