123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- # Copyright (c) Twisted Matrix Laboratories.
- # See LICENSE for details.
- """
- Tests for L{twisted.python.runtime}.
- """
- from __future__ import division, absolute_import
- import sys
- from twisted.python.reflect import namedModule
- from twisted.trial.util import suppress as SUPRESS
- from twisted.trial.unittest import SynchronousTestCase
- from twisted.python.runtime import Platform, shortPythonVersion
- class PythonVersionTests(SynchronousTestCase):
- """
- Tests the shortPythonVersion method.
- """
- def test_shortPythonVersion(self):
- """
- Verify if the Python version is returned correctly.
- """
- ver = shortPythonVersion().split('.')
- for i in range(3):
- self.assertEqual(int(ver[i]), sys.version_info[i])
- class PlatformTests(SynchronousTestCase):
- """
- Tests for the default L{Platform} initializer.
- """
- isWinNTDeprecationMessage = ('twisted.python.runtime.Platform.isWinNT was '
- 'deprecated in Twisted 13.0. Use Platform.isWindows instead.')
- def test_isKnown(self):
- """
- L{Platform.isKnown} returns a boolean indicating whether this is one of
- the L{runtime.knownPlatforms}.
- """
- platform = Platform()
- self.assertTrue(platform.isKnown())
- def test_isVistaConsistency(self):
- """
- Verify consistency of L{Platform.isVista}: it can only be C{True} if
- L{Platform.isWinNT} and L{Platform.isWindows} are C{True}.
- """
- platform = Platform()
- if platform.isVista():
- self.assertTrue(platform.isWinNT())
- self.assertTrue(platform.isWindows())
- self.assertFalse(platform.isMacOSX())
- def test_isMacOSXConsistency(self):
- """
- L{Platform.isMacOSX} can only return C{True} if L{Platform.getType}
- returns C{'posix'}.
- """
- platform = Platform()
- if platform.isMacOSX():
- self.assertEqual(platform.getType(), 'posix')
- def test_isLinuxConsistency(self):
- """
- L{Platform.isLinux} can only return C{True} if L{Platform.getType}
- returns C{'posix'} and L{sys.platform} starts with C{"linux"}.
- """
- platform = Platform()
- if platform.isLinux():
- self.assertTrue(sys.platform.startswith("linux"))
- def test_isWinNT(self):
- """
- L{Platform.isWinNT} can return only C{False} or C{True} and can not
- return C{True} if L{Platform.getType} is not C{"win32"}.
- """
- platform = Platform()
- isWinNT = platform.isWinNT()
- self.assertIn(isWinNT, (False, True))
- if platform.getType() != "win32":
- self.assertFalse(isWinNT)
- test_isWinNT.suppress = [SUPRESS(category=DeprecationWarning,
- message=isWinNTDeprecationMessage)]
- def test_isWinNTDeprecated(self):
- """
- L{Platform.isWinNT} is deprecated in favor of L{platform.isWindows}.
- """
- platform = Platform()
- platform.isWinNT()
- warnings = self.flushWarnings([self.test_isWinNTDeprecated])
- self.assertEqual(len(warnings), 1)
- self.assertEqual(
- warnings[0]['message'], self.isWinNTDeprecationMessage)
- def test_supportsThreads(self):
- """
- L{Platform.supportsThreads} returns C{True} if threads can be created in
- this runtime, C{False} otherwise.
- """
- # It's difficult to test both cases of this without faking the threading
- # module. Perhaps an adequate test is to just test the behavior with
- # the current runtime, whatever that happens to be.
- try:
- namedModule('threading')
- except ImportError:
- self.assertFalse(Platform().supportsThreads())
- else:
- self.assertTrue(Platform().supportsThreads())
- class ForeignPlatformTests(SynchronousTestCase):
- """
- Tests for L{Platform} based overridden initializer values.
- """
- def test_getType(self):
- """
- If an operating system name is supplied to L{Platform}'s initializer,
- L{Platform.getType} returns the platform type which corresponds to that
- name.
- """
- self.assertEqual(Platform('nt').getType(), 'win32')
- self.assertEqual(Platform('ce').getType(), 'win32')
- self.assertEqual(Platform('posix').getType(), 'posix')
- self.assertEqual(Platform('java').getType(), 'java')
- def test_isMacOSX(self):
- """
- If a system platform name is supplied to L{Platform}'s initializer, it
- is used to determine the result of L{Platform.isMacOSX}, which returns
- C{True} for C{"darwin"}, C{False} otherwise.
- """
- self.assertTrue(Platform(None, 'darwin').isMacOSX())
- self.assertFalse(Platform(None, 'linux2').isMacOSX())
- self.assertFalse(Platform(None, 'win32').isMacOSX())
- def test_isLinux(self):
- """
- If a system platform name is supplied to L{Platform}'s initializer, it
- is used to determine the result of L{Platform.isLinux}, which returns
- C{True} for values beginning with C{"linux"}, C{False} otherwise.
- """
- self.assertFalse(Platform(None, 'darwin').isLinux())
- self.assertTrue(Platform(None, 'linux').isLinux())
- self.assertTrue(Platform(None, 'linux2').isLinux())
- self.assertTrue(Platform(None, 'linux3').isLinux())
- self.assertFalse(Platform(None, 'win32').isLinux())
- class DockerPlatformTests(SynchronousTestCase):
- """
- Tests for L{twisted.python.runtime.Platform.isDocker}.
- """
- def test_noChecksOnLinux(self):
- """
- If the platform is not Linux, C{isDocker()} always returns L{False}.
- """
- platform = Platform(None, 'win32')
- self.assertFalse(platform.isDocker())
- def test_noCGroups(self):
- """
- If the platform is Linux, and the cgroups file in C{/proc} does not
- exist, C{isDocker()} returns L{False}
- """
- platform = Platform(None, 'linux')
- self.assertFalse(platform.isDocker(_initCGroupLocation="fakepath"))
- def test_cgroupsSuggestsDocker(self):
- """
- If the platform is Linux, and the cgroups file (faked out here) exists,
- and one of the paths starts with C{/docker/}, C{isDocker()} returns
- C{True}.
- """
- cgroupsFile = self.mktemp()
- with open(cgroupsFile, 'wb') as f:
- # real cgroups file from inside a Debian 7 docker container
- f.write(b"""10:debug:/
- 9:net_prio:/
- 8:perf_event:/docker/104155a6453cb67590027e397dc90fc25a06a7508403c797bc89ea43adf8d35f
- 7:net_cls:/
- 6:freezer:/docker/104155a6453cb67590027e397dc90fc25a06a7508403c797bc89ea43adf8d35f
- 5:devices:/docker/104155a6453cb67590027e397dc90fc25a06a7508403c797bc89ea43adf8d35f
- 4:blkio:/docker/104155a6453cb67590027e397dc90fc25a06a7508403c797bc89ea43adf8d35f
- 3:cpuacct:/docker/104155a6453cb67590027e397dc90fc25a06a7508403c797bc89ea43adf8d35f
- 2:cpu:/docker/104155a6453cb67590027e397dc90fc25a06a7508403c797bc89ea43adf8d35f
- 1:cpuset:/docker/104155a6453cb67590027e397dc90fc25a06a7508403c797bc89ea43adf8d35f""")
- platform = Platform(None, 'linux')
- self.assertTrue(platform.isDocker(_initCGroupLocation=cgroupsFile))
- def test_cgroupsSuggestsRealSystem(self):
- """
- If the platform is Linux, and the cgroups file (faked out here) exists,
- and none of the paths starts with C{/docker/}, C{isDocker()} returns
- C{False}.
- """
- cgroupsFile = self.mktemp()
- with open(cgroupsFile, 'wb') as f:
- # real cgroups file from a Fedora 17 system
- f.write(b"""9:perf_event:/
- 8:blkio:/
- 7:net_cls:/
- 6:freezer:/
- 5:devices:/
- 4:memory:/
- 3:cpuacct,cpu:/
- 2:cpuset:/
- 1:name=systemd:/system""")
- platform = Platform(None, 'linux')
- self.assertFalse(platform.isDocker(_initCGroupLocation=cgroupsFile))
|