salt/tests/unit/utils/path_join_test.py

127 lines
3.7 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
'''
tests.unit.utils.path_join_test
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:codeauthor: :email:`Pedro Algarvio (pedro@algarvio.me)`
:copyright: © 2012-2013 by the SaltStack Team, see AUTHORS for more details
:license: Apache 2.0, see LICENSE for more details.
'''
# Import python libs
import os
import sys
import posixpath
import ntpath
import platform
import tempfile
# Import Salt Testing libs
from salttesting import TestCase
from salttesting.helpers import ensure_in_syspath
ensure_in_syspath('../../')
# Import salt libs
from salt.utils import path_join
2013-08-28 00:14:57 +00:00
from salt import syspaths
2012-09-07 17:04:14 +00:00
class PathJoinTestCase(TestCase):
2013-08-28 00:14:57 +00:00
def setUp(self):
self.skipTest('Skipped until properly mocked')
PLATFORM_FUNC = platform.system
BUILTIN_MODULES = sys.builtin_module_names
NIX_PATHS = (
(('/', 'key'), '/key'),
2012-09-07 17:04:14 +00:00
(('/etc/salt', '/etc/salt/pki'), '/etc/salt/etc/salt/pki'),
(('/usr/local', '/etc/salt/pki'), '/usr/local/etc/salt/pki')
2012-09-07 17:04:14 +00:00
)
WIN_PATHS = (
(('c:', 'temp', 'foo'), 'c:\\temp\\foo'),
(('c:', r'\temp', r'\foo'), 'c:\\temp\\foo'),
(('c:\\', r'\temp', r'\foo'), 'c:\\temp\\foo'),
((r'c:\\', r'\temp', r'\foo'), 'c:\\temp\\foo'),
(('c:', r'\temp', r'\foo', 'bar'), 'c:\\temp\\foo\\bar'),
(('c:', r'\temp', r'\foo\bar'), 'c:\\temp\\foo\\bar'),
(('c', r'\temp', r'\foo\bar'), 'c:\\temp\\foo\\bar')
)
def test_nix_paths(self):
if platform.system().lower() == "windows":
self.skipTest(
"Windows platform found. not running *nix path_join tests"
)
for idx, (parts, expected) in enumerate(self.NIX_PATHS):
path = path_join(*parts)
self.assertEqual(
'{0}: {1}'.format(idx, path),
'{0}: {1}'.format(idx, expected)
)
def test_windows_paths(self):
if platform.system().lower() != "windows":
self.skipTest(
2012-09-07 17:04:14 +00:00
'Non windows platform found. not running non patched os.path '
'path_join tests'
)
for idx, (parts, expected) in enumerate(self.WIN_PATHS):
path = path_join(*parts)
self.assertEqual(
'{0}: {1}'.format(idx, path),
'{0}: {1}'.format(idx, expected)
)
def test_windows_paths_patched_path_module(self):
if platform.system().lower() == "windows":
self.skipTest(
2012-09-07 17:04:14 +00:00
'Windows platform found. not running patched os.path '
'path_join tests'
)
self.__patch_path()
for idx, (parts, expected) in enumerate(self.WIN_PATHS):
path = path_join(*parts)
self.assertEqual(
'{0}: {1}'.format(idx, path),
'{0}: {1}'.format(idx, expected)
)
self.__unpatch_path()
def __patch_path(self):
import imp
modules = list(self.BUILTIN_MODULES[:])
modules.pop(modules.index('posix'))
modules.append('nt')
code = """'''Salt unittest loaded NT module'''"""
module = imp.new_module('nt')
exec code in module.__dict__
sys.modules['nt'] = module
sys.builtin_module_names = modules
platform.system = lambda: "windows"
for module in (ntpath, os, os.path, tempfile):
reload(module)
def __unpatch_path(self):
del sys.modules['nt']
sys.builtin_module_names = self.BUILTIN_MODULES[:]
platform.system = self.PLATFORM_FUNC
for module in (posixpath, os, os.path, tempfile, platform):
reload(module)
if __name__ == '__main__':
from integration import run_tests
run_tests(PathJoinTestCase, needs_daemon=False)