~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_osutils.py

  • Committer: John Arbash Meinel
  • Date: 2009-12-08 21:37:36 UTC
  • mto: This revision was merged to the branch mainline in revision 4885.
  • Revision ID: john@arbash-meinel.com-20091208213736-vje7ublg3xzp1bs2
Now that we return files directly from the working tree
the windows 'attrib' test needed to be updated.
If we used the working tree for both old and new, then the test wasn't
really testing what we expected, which was that the newly generated
content was readable.

But using basis_tree gets us that. Also, test that the content is
properly marked as readonly, and that we have available content from
the working tree.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2010 Canonical Ltd
 
1
# Copyright (C) 2005, 2006, 2007, 2008, 2009 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
23
23
import socket
24
24
import stat
25
25
import sys
 
26
import termios
26
27
import time
27
28
 
28
29
from bzrlib import (
33
34
    win32utils,
34
35
    )
35
36
from bzrlib.tests import (
36
 
    features,
37
37
    file_utils,
38
38
    test__walkdirs_win32,
39
39
    )
54
54
 
55
55
UTF8DirReaderFeature = _UTF8DirReaderFeature()
56
56
 
57
 
term_ios_feature = tests.ModuleAvailableFeature('termios')
58
 
 
59
57
 
60
58
def _already_unicode(s):
61
59
    return s
83
81
                          dict(_dir_reader_class=_readdir_pyx.UTF8DirReader,
84
82
                               _native_to_unicode=_utf8_to_unicode)))
85
83
 
86
 
    if test__walkdirs_win32.win32_readdir_feature.available():
 
84
    if test__walkdirs_win32.Win32ReadDirFeature.available():
87
85
        try:
88
86
            from bzrlib import _walkdirs_win32
89
87
            scenarios.append(
184
182
        shape = sorted(os.listdir('.'))
185
183
        self.assertEquals(['A', 'B'], shape)
186
184
 
187
 
    def test_rename_error(self):
188
 
        # We wrap os.rename to make it give an error including the filenames
189
 
        # https://bugs.launchpad.net/bzr/+bug/491763
190
 
        err = self.assertRaises(OSError, osutils.rename,
191
 
            'nonexistent', 'target')
192
 
        self.assertContainsString(str(err), 'nonexistent')
193
 
 
194
185
 
195
186
class TestRandChars(tests.TestCase):
196
187
 
317
308
        self.assertEqual("/", osutils.kind_marker(osutils._directory_kind))
318
309
        self.assertEqual("@", osutils.kind_marker("symlink"))
319
310
        self.assertEqual("+", osutils.kind_marker("tree-reference"))
320
 
        self.assertEqual("", osutils.kind_marker("fifo"))
321
 
        self.assertEqual("", osutils.kind_marker("socket"))
322
 
        self.assertEqual("", osutils.kind_marker("unknown"))
 
311
        self.assertRaises(errors.BzrError, osutils.kind_marker, "unknown")
323
312
 
324
313
 
325
314
class TestUmask(tests.TestCaseInTempDir):
999
988
 
1000
989
    def test_osutils_binding(self):
1001
990
        from bzrlib.tests import test__chunks_to_lines
1002
 
        if test__chunks_to_lines.compiled_chunkstolines_feature.available():
 
991
        if test__chunks_to_lines.CompiledChunksToLinesFeature.available():
1003
992
            from bzrlib._chunks_to_lines_pyx import chunks_to_lines
1004
993
        else:
1005
994
            from bzrlib._chunks_to_lines_py import chunks_to_lines
1145
1134
            dirblock[:] = new_dirblock
1146
1135
 
1147
1136
    def _save_platform_info(self):
1148
 
        self.overrideAttr(win32utils, 'winver')
1149
 
        self.overrideAttr(osutils, '_fs_enc')
1150
 
        self.overrideAttr(osutils, '_selected_dir_reader')
 
1137
        cur_winver = win32utils.winver
 
1138
        cur_fs_enc = osutils._fs_enc
 
1139
        cur_dir_reader = osutils._selected_dir_reader
 
1140
        def restore():
 
1141
            win32utils.winver = cur_winver
 
1142
            osutils._fs_enc = cur_fs_enc
 
1143
            osutils._selected_dir_reader = cur_dir_reader
 
1144
        self.addCleanup(restore)
1151
1145
 
1152
1146
    def assertDirReaderIs(self, expected):
1153
1147
        """Assert the right implementation for _walkdirs_utf8 is chosen."""
1186
1180
 
1187
1181
    def test_force_walkdirs_utf8_nt(self):
1188
1182
        # Disabled because the thunk of the whole walkdirs api is disabled.
1189
 
        self.requireFeature(test__walkdirs_win32.win32_readdir_feature)
 
1183
        self.requireFeature(test__walkdirs_win32.Win32ReadDirFeature)
1190
1184
        self._save_platform_info()
1191
1185
        win32utils.winver = 'Windows NT'
1192
1186
        from bzrlib._walkdirs_win32 import Win32ReadDir
1193
1187
        self.assertDirReaderIs(Win32ReadDir)
1194
1188
 
1195
1189
    def test_force_walkdirs_utf8_98(self):
1196
 
        self.requireFeature(test__walkdirs_win32.win32_readdir_feature)
 
1190
        self.requireFeature(test__walkdirs_win32.Win32ReadDirFeature)
1197
1191
        self._save_platform_info()
1198
1192
        win32utils.winver = 'Windows 98'
1199
1193
        self.assertDirReaderIs(osutils.UnicodeDirReader)
1350
1344
        self.assertEqual(expected_dirblocks, result)
1351
1345
 
1352
1346
    def test__walkdirs_utf8_win32readdir(self):
1353
 
        self.requireFeature(test__walkdirs_win32.win32_readdir_feature)
 
1347
        self.requireFeature(test__walkdirs_win32.Win32ReadDirFeature)
1354
1348
        self.requireFeature(tests.UnicodeFilenameFeature)
1355
1349
        from bzrlib._walkdirs_win32 import Win32ReadDir
1356
1350
        self._save_platform_info()
1407
1401
 
1408
1402
    def test__walkdirs_utf_win32_find_file_stat_file(self):
1409
1403
        """make sure our Stat values are valid"""
1410
 
        self.requireFeature(test__walkdirs_win32.win32_readdir_feature)
 
1404
        self.requireFeature(test__walkdirs_win32.Win32ReadDirFeature)
1411
1405
        self.requireFeature(tests.UnicodeFilenameFeature)
1412
1406
        from bzrlib._walkdirs_win32 import Win32ReadDir
1413
1407
        name0u = u'0file-\xb6'
1431
1425
 
1432
1426
    def test__walkdirs_utf_win32_find_file_stat_directory(self):
1433
1427
        """make sure our Stat values are valid"""
1434
 
        self.requireFeature(test__walkdirs_win32.win32_readdir_feature)
 
1428
        self.requireFeature(test__walkdirs_win32.Win32ReadDirFeature)
1435
1429
        self.requireFeature(tests.UnicodeFilenameFeature)
1436
1430
        from bzrlib._walkdirs_win32 import Win32ReadDir
1437
1431
        name0u = u'0dir-\u062c\u0648'
1586
1580
        def cleanup():
1587
1581
            if 'BZR_TEST_ENV_VAR' in os.environ:
1588
1582
                del os.environ['BZR_TEST_ENV_VAR']
 
1583
 
1589
1584
        self.addCleanup(cleanup)
1590
1585
 
1591
1586
    def test_set(self):
1702
1697
 
1703
1698
    def setUp(self):
1704
1699
        tests.TestCaseInTempDir.setUp(self)
1705
 
        self.overrideAttr(osutils,
1706
 
                          '_selected_dir_reader', self._dir_reader_class())
 
1700
 
 
1701
        # Save platform specific info and reset it
 
1702
        cur_dir_reader = osutils._selected_dir_reader
 
1703
 
 
1704
        def restore():
 
1705
            osutils._selected_dir_reader = cur_dir_reader
 
1706
        self.addCleanup(restore)
 
1707
 
 
1708
        osutils._selected_dir_reader = self._dir_reader_class()
1707
1709
 
1708
1710
    def _get_ascii_tree(self):
1709
1711
        tree = [
1856
1858
 
1857
1859
    def setUp(self):
1858
1860
        super(TestConcurrency, self).setUp()
1859
 
        self.overrideAttr(osutils, '_cached_local_concurrency')
 
1861
        orig = osutils._cached_local_concurrency
 
1862
        def restore():
 
1863
            osutils._cached_local_concurrency = orig
 
1864
        self.addCleanup(restore)
1860
1865
 
1861
1866
    def test_local_concurrency(self):
1862
1867
        concurrency = osutils.local_concurrency()
1889
1894
 
1890
1895
    def setUp(self):
1891
1896
        super(TestFailedToLoadExtension, self).setUp()
1892
 
        self.overrideAttr(osutils, '_extension_load_failures', [])
 
1897
        self.saved_failures = osutils._extension_load_failures[:]
 
1898
        del osutils._extension_load_failures[:]
 
1899
        self.addCleanup(self.restore_failures)
 
1900
 
 
1901
    def restore_failures(self):
 
1902
        osutils._extension_load_failures = self.saved_failures
1893
1903
 
1894
1904
    def test_failure_to_load(self):
1895
1905
        self._try_loading()
1917
1927
 
1918
1928
class TestTerminalWidth(tests.TestCase):
1919
1929
 
1920
 
    def replace_stdout(self, new):
1921
 
        self.overrideAttr(sys, 'stdout', new)
1922
 
 
1923
 
    def replace__terminal_size(self, new):
1924
 
        self.overrideAttr(osutils, '_terminal_size', new)
1925
 
 
1926
 
    def set_fake_tty(self):
1927
 
 
1928
 
        class I_am_a_tty(object):
1929
 
            def isatty(self):
1930
 
                return True
1931
 
 
1932
 
        self.replace_stdout(I_am_a_tty())
1933
 
 
1934
1930
    def test_default_values(self):
1935
 
        self.assertEqual(80, osutils.default_terminal_width)
 
1931
        self.assertEquals(80, osutils.default_terminal_width)
1936
1932
 
1937
1933
    def test_defaults_to_BZR_COLUMNS(self):
1938
1934
        # BZR_COLUMNS is set by the test framework
1939
 
        self.assertNotEqual('12', os.environ['BZR_COLUMNS'])
 
1935
        self.assertEquals('80', os.environ['BZR_COLUMNS'])
1940
1936
        os.environ['BZR_COLUMNS'] = '12'
1941
 
        self.assertEqual(12, osutils.terminal_width())
1942
 
 
1943
 
    def test_falls_back_to_COLUMNS(self):
1944
 
        del os.environ['BZR_COLUMNS']
1945
 
        self.assertNotEqual('42', os.environ['COLUMNS'])
1946
 
        self.set_fake_tty()
1947
 
        os.environ['COLUMNS'] = '42'
1948
 
        self.assertEqual(42, osutils.terminal_width())
 
1937
        self.assertEquals(12, osutils.terminal_width())
1949
1938
 
1950
1939
    def test_tty_default_without_columns(self):
1951
1940
        del os.environ['BZR_COLUMNS']
1952
1941
        del os.environ['COLUMNS']
1953
 
 
1954
 
        def terminal_size(w, h):
1955
 
            return 42, 42
1956
 
 
1957
 
        self.set_fake_tty()
1958
 
        # We need to override the osutils definition as it depends on the
1959
 
        # running environment that we can't control (PQM running without a
1960
 
        # controlling terminal is one example).
1961
 
        self.replace__terminal_size(terminal_size)
1962
 
        self.assertEqual(42, osutils.terminal_width())
 
1942
        orig_stdout = sys.stdout
 
1943
        def restore():
 
1944
            sys.stdout = orig_stdout
 
1945
        self.addCleanup(restore)
 
1946
 
 
1947
        class I_am_a_tty(object):
 
1948
            def isatty(self):
 
1949
                return True
 
1950
 
 
1951
        sys.stdout = I_am_a_tty()
 
1952
        self.assertEquals(None, osutils.terminal_width())
1963
1953
 
1964
1954
    def test_non_tty_default_without_columns(self):
1965
1955
        del os.environ['BZR_COLUMNS']
1966
1956
        del os.environ['COLUMNS']
1967
 
        self.replace_stdout(None)
1968
 
        self.assertEqual(None, osutils.terminal_width())
 
1957
        orig_stdout = sys.stdout
 
1958
        def restore():
 
1959
            sys.stdout = orig_stdout
 
1960
        self.addCleanup(restore)
 
1961
        sys.stdout = None
 
1962
        self.assertEquals(None, osutils.terminal_width())
1969
1963
 
1970
 
    def test_no_TIOCGWINSZ(self):
1971
 
        self.requireFeature(term_ios_feature)
1972
 
        termios = term_ios_feature.module
 
1964
    def test_TIOCGWINSZ(self):
1973
1965
        # bug 63539 is about a termios without TIOCGWINSZ attribute
 
1966
        exist = True
1974
1967
        try:
1975
1968
            orig = termios.TIOCGWINSZ
1976
1969
        except AttributeError:
1977
 
            # We won't remove TIOCGWINSZ, because it doesn't exist anyway :)
1978
 
            pass
1979
 
        else:
1980
 
            self.overrideAttr(termios, 'TIOCGWINSZ')
1981
 
            del termios.TIOCGWINSZ
 
1970
            exist = False
 
1971
 
 
1972
        def restore():
 
1973
            if exist:
 
1974
                termios.TIOCGWINSZ = orig
 
1975
        self.addCleanup(restore)
 
1976
 
 
1977
        del termios.TIOCGWINSZ
1982
1978
        del os.environ['BZR_COLUMNS']
1983
1979
        del os.environ['COLUMNS']
1984
 
        # Whatever the result is, if we don't raise an exception, it's ok.
1985
 
        osutils.terminal_width()
1986
 
 
1987
 
class TestCreationOps(tests.TestCaseInTempDir):
1988
 
    _test_needs_features = [features.chown_feature]
1989
 
 
1990
 
    def setUp(self):
1991
 
        tests.TestCaseInTempDir.setUp(self)
1992
 
        self.overrideAttr(os, 'chown', self._dummy_chown)
1993
 
 
1994
 
        # params set by call to _dummy_chown
1995
 
        self.path = self.uid = self.gid = None
1996
 
 
1997
 
    def _dummy_chown(self, path, uid, gid):
1998
 
        self.path, self.uid, self.gid = path, uid, gid
1999
 
 
2000
 
    def test_copy_ownership_from_path(self):
2001
 
        """copy_ownership_from_path test with specified src."""
2002
 
        ownsrc = '/'
2003
 
        f = open('test_file', 'wt')
2004
 
        osutils.copy_ownership_from_path('test_file', ownsrc)
2005
 
 
2006
 
        s = os.stat(ownsrc)
2007
 
        self.assertEquals(self.path, 'test_file')
2008
 
        self.assertEquals(self.uid, s.st_uid)
2009
 
        self.assertEquals(self.gid, s.st_gid)
2010
 
 
2011
 
    def test_copy_ownership_nonesrc(self):
2012
 
        """copy_ownership_from_path test with src=None."""
2013
 
        f = open('test_file', 'wt')
2014
 
        # should use parent dir for permissions
2015
 
        osutils.copy_ownership_from_path('test_file')
2016
 
 
2017
 
        s = os.stat('..')
2018
 
        self.assertEquals(self.path, 'test_file')
2019
 
        self.assertEquals(self.uid, s.st_uid)
2020
 
        self.assertEquals(self.gid, s.st_gid)
 
1980
        self.assertEquals(None, osutils.terminal_width())