59 lines
2.2 KiB
Python
59 lines
2.2 KiB
Python
import imp
|
|
import sys
|
|
|
|
import unittest
|
|
|
|
# Note:
|
|
# In Python 3.x, this test case is in Lib/test/test_importlib/test_util.py
|
|
|
|
class MagicNumberTests(unittest.TestCase):
|
|
"""
|
|
Test release compatibility issues relating to precompiled bytecode
|
|
"""
|
|
@unittest.skipUnless(
|
|
sys.version_info.releaselevel in ('final', 'release'),
|
|
'only applies to candidate or final python release levels'
|
|
)
|
|
def test_magic_number(self):
|
|
"""
|
|
Each python minor release should generally have a MAGIC_NUMBER
|
|
that does not change once the release reaches candidate status.
|
|
|
|
Once a release reaches candidate status, the value of the constant
|
|
EXPECTED_MAGIC_NUMBER in this test should be changed.
|
|
This test will then check that the actual MAGIC_NUMBER matches
|
|
the expected value for the release.
|
|
|
|
In exceptional cases, it may be required to change the MAGIC_NUMBER
|
|
for a maintenance release. In this case the change should be
|
|
discussed in python-dev. If a change is required, community
|
|
stakeholders such as OS package maintainers must be notified
|
|
in advance. Such exceptional releases will then require an
|
|
adjustment to this test case.
|
|
"""
|
|
EXPECTED_MAGIC_NUMBER = 62211
|
|
raw_magic = imp.get_magic()
|
|
actual = (ord(raw_magic[1]) << 8) + ord(raw_magic[0])
|
|
|
|
msg = (
|
|
"To avoid breaking backwards compatibility with cached bytecode "
|
|
"files that can't be automatically regenerated by the current "
|
|
"user, candidate and final releases require the current "
|
|
"importlib.util.MAGIC_NUMBER to match the expected "
|
|
"magic number in this test. Set the expected "
|
|
"magic number in this test to the current MAGIC_NUMBER to "
|
|
"continue with the release.\n\n"
|
|
"Changing the MAGIC_NUMBER for a maintenance release "
|
|
"requires discussion in python-dev and notification of "
|
|
"community stakeholders."
|
|
)
|
|
self.assertEqual(EXPECTED_MAGIC_NUMBER, actual)#, msg)
|
|
|
|
|
|
def test_main():
|
|
from test.support import run_unittest
|
|
run_unittest(MagicNumberTests)
|
|
|
|
if __name__ == '__main__':
|
|
test_main()
|