from __future__ import print_function
import logging
import unittest
from .base import BasePublicIPChecker, registry
from .utils import get_public_ip, list_checkers, ensure_autodiscover
from .discover import autodiscover
__title__ = 'pif.tests'
__author__ = 'Artur Barseghyan'
__copyright__ = '2013-2016 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = (
'log_info',
'PifTest',
)
LOG_INFO = True
LOGGER = logging.getLogger(__name__)
[docs]def log_info(func):
"""Prints some useful info."""
if not LOG_INFO:
return func
def inner(self, *args, **kwargs):
result = func(self, *args, **kwargs)
LOGGER.info('\n%s', func.__name__)
LOGGER.info('============================')
LOGGER.info('""" %s """', func.__doc__.strip())
LOGGER.info('----------------------------')
if result is not None:
LOGGER.info(result)
return result
return inner
[docs]class PifTest(unittest.TestCase):
"""Tests."""
[docs] def setUp(self):
"""Set up."""
pass
@log_info
[docs] def test_01_autodiscover(self):
"""Test ``autodiscover``."""
autodiscover()
self.assertTrue(len(registry.registry) > 0)
@log_info
[docs] def test_02_get_public_ip(self):
"""Test get IP."""
res = get_public_ip(verbose=True)
self.assertIsNotNone(res)
return res
@log_info
def _test_get_public_ip_using_preferred_checker(self, checker):
"""Test get_public_ip using preferred checker."""
res = get_public_ip(checker, verbose=True)
return res
@log_info
[docs] def test_03_get_public_ip_using_preferred_checker(self):
"""Test get IP using preferred checker `ident.me`."""
checkers = list_checkers()
res = {}
failed = []
for checker in checkers:
_res = self._test_get_public_ip_using_preferred_checker(checker)
if _res is None:
failed.append(checker)
res.update({checker: _res})
self.assertTrue(
len(failed) == 0,
"Failed for {}".format(','.join(failed))
)
return res
@log_info
[docs] def test_04_list_checkers(self):
"""Lists all registered checkers."""
res = list_checkers()
self.assertTrue(len(res) > 0)
return res
@log_info
[docs] def test_05_unregister_checker(self):
"""Test un-register checker `dyndns.com`."""
self.assertTrue('dyndns.com' in registry.registry.keys())
registry.unregister('dyndns.com')
self.assertTrue('dyndns.com' not in registry.registry.keys())
@log_info
[docs] def test_06_register_custom_checker(self):
"""Test un-register checker `dyndns`."""
class MyPublicIPChecker(BasePublicIPChecker):
"""MyPublicIPChecker."""
uid = 'mypublicipchecker'
def get_public_ip(self):
"""Get public IP."""
return '8.8.8.8'
registry.register(MyPublicIPChecker)
self.assertTrue('mypublicipchecker' in registry.registry.keys())
@log_info
[docs] def test_07_get_local_ip(self):
"""Test get local IP."""
ensure_autodiscover()
ip_checker_cls = list(registry.registry.values())[0]
ip_checker = ip_checker_cls(verbose=False)
local_ip = ip_checker.get_local_ip()
self.assertIsNotNone(local_ip)
if __name__ == '__main__':
unittest.main()