Skip to content

Commit

Permalink
CI: clean up ignored tests
Browse files Browse the repository at this point in the history
Remove tests which are passing now, or no longer exist, and
move tests which only fail with msvcrt into a separate file.
  • Loading branch information
naveen521kk committed Aug 5, 2024
1 parent ad679e5 commit 4d9ee66
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 97 deletions.
12 changes: 10 additions & 2 deletions .github/workflows/mingw.yml
Original file line number Diff line number Diff line change
Expand Up @@ -91,16 +91,24 @@ jobs:
shell: msys2 {0}
run: |
IGNOREFILE="$(pwd)/mingw_ignorefile.txt"
IGNOREFILE_EXTRA="$IGNOREFILE"
if [[ "${{ matrix.msystem }}" == "MINGW32" ]] || [[ "${{ matrix.msystem }}" == "MINGW64" ]]; then
IGNOREFILE_EXTRA="$(pwd)/mingw_ignorefile_msvcrt.txt"
fi
cd _build
MSYSTEM= ./python.exe -m test -j8 --ignorefile "$IGNOREFILE" -W
MSYSTEM= ./python.exe -m test -j8 --ignorefile "$IGNOREFILE" --ignorefile "$IGNOREFILE_EXTRA" -W
- name: Run broken tests
continue-on-error: true
shell: msys2 {0}
run: |
IGNOREFILE="$(pwd)/mingw_ignorefile.txt"
IGNOREFILE_EXTRA="$IGNOREFILE"
if [[ "${{ matrix.msystem }}" == "MINGW32" ]] || [[ "${{ matrix.msystem }}" == "MINGW64" ]]; then
IGNOREFILE_EXTRA="$(pwd)/mingw_ignorefile_msvcrt.txt"
fi
cd _build
MSYSTEM= ./python.exe -m test -j8 --matchfile "$IGNOREFILE" -W
MSYSTEM= ./python.exe -m test -j8 --matchfile "$IGNOREFILE" --matchfile "$IGNOREFILE_EXTRA" -W
- name: Install
shell: msys2 {0}
Expand Down
148 changes: 74 additions & 74 deletions Lib/test/test_wmi.py
Original file line number Diff line number Diff line change
@@ -1,74 +1,74 @@
# Test the internal _wmi module on Windows
# This is used by the platform module, and potentially others

import unittest
from test.support import import_helper, requires_resource


# Do this first so test will be skipped if module doesn't exist
_wmi = import_helper.import_module('_wmi', required_on=['win'])


class WmiTests(unittest.TestCase):
def test_wmi_query_os_version(self):
r = _wmi.exec_query("SELECT Version FROM Win32_OperatingSystem").split("\0")
self.assertEqual(1, len(r))
k, eq, v = r[0].partition("=")
self.assertEqual("=", eq, r[0])
self.assertEqual("Version", k, r[0])
# Best we can check for the version is that it's digits, dot, digits, anything
# Otherwise, we are likely checking the result of the query against itself
self.assertRegex(v, r"\d+\.\d+.+$", r[0])

def test_wmi_query_repeated(self):
# Repeated queries should not break
for _ in range(10):
self.test_wmi_query_os_version()

def test_wmi_query_error(self):
# Invalid queries fail with OSError
try:
_wmi.exec_query("SELECT InvalidColumnName FROM InvalidTableName")
except OSError as ex:
if ex.winerror & 0xFFFFFFFF == 0x80041010:
# This is the expected error code. All others should fail the test
return
self.fail("Expected OSError")

def test_wmi_query_repeated_error(self):
for _ in range(10):
self.test_wmi_query_error()

def test_wmi_query_not_select(self):
# Queries other than SELECT are blocked to avoid potential exploits
with self.assertRaises(ValueError):
_wmi.exec_query("not select, just in case someone tries something")

@requires_resource('cpu')
def test_wmi_query_overflow(self):
# Ensure very big queries fail
# Test multiple times to ensure consistency
for _ in range(2):
with self.assertRaises(OSError):
_wmi.exec_query("SELECT * FROM CIM_DataFile")

def test_wmi_query_multiple_rows(self):
# Multiple instances should have an extra null separator
r = _wmi.exec_query("SELECT ProcessId FROM Win32_Process WHERE ProcessId < 1000")
self.assertFalse(r.startswith("\0"), r)
self.assertFalse(r.endswith("\0"), r)
it = iter(r.split("\0"))
try:
while True:
self.assertRegex(next(it), r"ProcessId=\d+")
self.assertEqual("", next(it))
except StopIteration:
pass

def test_wmi_query_threads(self):
from concurrent.futures import ThreadPoolExecutor
query = "SELECT ProcessId FROM Win32_Process WHERE ProcessId < 1000"
with ThreadPoolExecutor(4) as pool:
task = [pool.submit(_wmi.exec_query, query) for _ in range(32)]
for t in task:
self.assertRegex(t.result(), "ProcessId=")
# Test the internal _wmi module on Windows
# This is used by the platform module, and potentially others

import unittest
from test.support import import_helper, requires_resource


# Do this first so test will be skipped if module doesn't exist
_wmi = import_helper.import_module('_wmi')


class WmiTests(unittest.TestCase):
def test_wmi_query_os_version(self):
r = _wmi.exec_query("SELECT Version FROM Win32_OperatingSystem").split("\0")
self.assertEqual(1, len(r))
k, eq, v = r[0].partition("=")
self.assertEqual("=", eq, r[0])
self.assertEqual("Version", k, r[0])
# Best we can check for the version is that it's digits, dot, digits, anything
# Otherwise, we are likely checking the result of the query against itself
self.assertRegex(v, r"\d+\.\d+.+$", r[0])

def test_wmi_query_repeated(self):
# Repeated queries should not break
for _ in range(10):
self.test_wmi_query_os_version()

def test_wmi_query_error(self):
# Invalid queries fail with OSError
try:
_wmi.exec_query("SELECT InvalidColumnName FROM InvalidTableName")
except OSError as ex:
if ex.winerror & 0xFFFFFFFF == 0x80041010:
# This is the expected error code. All others should fail the test
return
self.fail("Expected OSError")

def test_wmi_query_repeated_error(self):
for _ in range(10):
self.test_wmi_query_error()

def test_wmi_query_not_select(self):
# Queries other than SELECT are blocked to avoid potential exploits
with self.assertRaises(ValueError):
_wmi.exec_query("not select, just in case someone tries something")

@requires_resource('cpu')
def test_wmi_query_overflow(self):
# Ensure very big queries fail
# Test multiple times to ensure consistency
for _ in range(2):
with self.assertRaises(OSError):
_wmi.exec_query("SELECT * FROM CIM_DataFile")

def test_wmi_query_multiple_rows(self):
# Multiple instances should have an extra null separator
r = _wmi.exec_query("SELECT ProcessId FROM Win32_Process WHERE ProcessId < 1000")
self.assertFalse(r.startswith("\0"), r)
self.assertFalse(r.endswith("\0"), r)
it = iter(r.split("\0"))
try:
while True:
self.assertRegex(next(it), r"ProcessId=\d+")
self.assertEqual("", next(it))
except StopIteration:
pass

def test_wmi_query_threads(self):
from concurrent.futures import ThreadPoolExecutor
query = "SELECT ProcessId FROM Win32_Process WHERE ProcessId < 1000"
with ThreadPoolExecutor(4) as pool:
task = [pool.submit(_wmi.exec_query, query) for _ in range(32)]
for t in task:
self.assertRegex(t.result(), "ProcessId=")
23 changes: 2 additions & 21 deletions mingw_ignorefile.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,11 @@ test.test_ctypes.test_loading.LoaderTest.test_load_dll_with_flags
distutils.tests.test_bdist_dumb.BuildDumbTestCase.test_simple_built
distutils.tests.test_cygwinccompiler.CygwinCCompilerTestCase.test_get_versions
distutils.tests.test_util.UtilTestCase.test_change_root
test.datetimetester.TestLocalTimeDisambiguation_Fast.*
test.datetimetester.TestLocalTimeDisambiguation_Pure.*
test.test_cmath.CMathTests.test_specific_values
test.test_cmd_line_script.CmdLineTest.test_consistent_sys_path_for_direct_execution
test.test_compileall.CommandLineTestsNoSourceEpoch.*
test.test_compileall.CommandLineTestsWithSourceEpoch.*
test.test_compileall.CompileallTestsWithoutSourceEpoch.*
test.test_compileall.CompileallTestsWithSourceEpoch.*
test.test_import.ImportTests.test_dll_dependency_import
test.test_math.MathTests.*
test.test_ntpath.NtCommonTest.test_import
test.test_os.StatAttributeTests.test_stat_block_device
test.test_os.TestScandir.test_attributes
Expand All @@ -23,21 +18,7 @@ test.test_site._pthFileTests.*
test.test_site.HelperFunctionsTests.*
test.test_site.StartupImportTests.*
test.test_ssl.*
test.test_strptime.CalculationTests.*
test.test_strptime.StrptimeTests.test_weekday
test.test_strptime.TimeRETests.test_compile
test.test_tools.test_i18n.Test_pygettext.test_POT_Creation_Date
test.test_venv.BasicTest.*
test.test_venv.EnsurePipTest.*
test.test_sysconfig.TestSysConfig.test_user_similar
test.test_tcl.TclTest.testLoadWithUNC
test.test_wmi
# flaky
test.test__xxsubinterpreters.*
test.test_asyncio.test_subprocess.SubprocessProactorTests.test_stdin_broken_pipe
test.test_asynchat.TestAsynchat.test_line_terminator2
test.test_asyncgen.AsyncGenAsyncioTest.test_async_gen_asyncio_gc_aclose_09
test.test_concurrent_futures.ThreadPoolShutdownTest.test_interpreter_shutdown
test.test_asynchat.TestNotConnected.test_disallow_negative_terminator
test.test_logging.SysLogHandlerTest.*
test.test_logging.IPv6SysLogHandlerTest.*

test.test_dict.DictTest.test_splittable_to_generic_combinedtable
8 changes: 8 additions & 0 deletions mingw_ignorefile_msvcrt.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
test.datetimetester.TestLocalTimeDisambiguation_Fast.*
test.datetimetester.TestLocalTimeDisambiguation_Pure.*
test.test_cmath.CMathTests.test_specific_values
test.test_math.MathTests.*
test.test_strptime.CalculationTests.*
test.test_strptime.StrptimeTests.test_weekday
test.test_strptime.TimeRETests.test_compile
test.test_tools.test_i18n.Test_pygettext.test_POT_Creation_Date

0 comments on commit 4d9ee66

Please sign in to comment.