From 8b4e38958ff8bdbb3ece4796bfa2d3b6f7536f71 Mon Sep 17 00:00:00 2001
From: Changqing Li <changqing.li@windriver.com>
Date: Wed, 23 Feb 2022 11:54:40 +0800
Subject: [PATCH] fix failure test cases

The test cases is not robust enough. skip some cases that is
not suitable for all conditions.

* test_io_counters failed when kernel config CONFIG_TASKSTATS
  and CONFIG_TASK_IO_ACCOUNTING are not enable in OE 
* test_setup_script failed since oe don't install setup.py
* test_used failed since oe use git source for free, so the version
  is 3.3.17-dirty
* test_weird_environ failed since gcc not installed
* test_debug failed since it is designed to run when PSUTIL_DEBUG is set
* test_against_findmnt/test_comparisons/test_disk_partitions_mocked/
  test_disk_partitions is not suitable for Linux nfs boot

Upstream-Status: Pending

Signed-off-by: Changqing Li <changqing.li@windriver.com>
---
 psutil/tests/test_contracts.py | 1 +
 psutil/tests/test_linux.py     | 8 ++++++--
 psutil/tests/test_misc.py      | 4 ++++
 psutil/tests/test_process.py   | 5 +++++
 psutil/tests/test_system.py    | 1 +
 psutil/tests/test_unicode.py   | 4 +++-
 6 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/psutil/tests/test_contracts.py b/psutil/tests/test_contracts.py
index 7401cc1..bf0fca0 100755
--- a/psutil/tests/test_contracts.py
+++ b/psutil/tests/test_contracts.py
@@ -172,6 +172,7 @@ class TestAvailProcessAPIs(PsutilTestCase):
     def test_rlimit(self):
         self.assertEqual(hasattr(psutil.Process, "rlimit"), LINUX or FREEBSD)
 
+    @unittest.skip("broken on OE since kernel config maye not be enabled")
     def test_io_counters(self):
         hasit = hasattr(psutil.Process, "io_counters")
         self.assertEqual(hasit, False if MACOS or SUNOS else True)
diff --git a/psutil/tests/test_linux.py b/psutil/tests/test_linux.py
index 20e28d2..66b6dda 100755
--- a/psutil/tests/test_linux.py
+++ b/psutil/tests/test_linux.py
@@ -196,8 +196,9 @@ def get_free_version_info():
     out = sh(["free", "-V"]).strip()
     if 'UNKNOWN' in out:
         raise unittest.SkipTest("can't determine free version")
-    return tuple(map(int, out.split()[-1].split('.')))
-
+    vlist = out.split()[-1].split('.')
+    vlist[:] = [n.split('-')[0] for n in vlist]
+    return tuple(map(int, vlist))
 
 @contextlib.contextmanager
 def mock_open_content(for_path, content):
@@ -1289,6 +1290,7 @@ class TestRootFsDeviceFinder(PsutilTestCase):
         finder.ask_sys_class_block()
 
     @unittest.skipIf(GITHUB_ACTIONS, "unsupported on GITHUB_ACTIONS")
+    @unittest.skip("Broken for oe")
     def test_comparisons(self):
         finder = RootFsDeviceFinder()
         self.assertIsNotNone(finder.find())
@@ -1311,11 +1313,13 @@ class TestRootFsDeviceFinder(PsutilTestCase):
 
     @unittest.skipIf(not which("findmnt"), "findmnt utility not available")
     @unittest.skipIf(GITHUB_ACTIONS, "unsupported on GITHUB_ACTIONS")
+    @unittest.skip("Broken for oe")
     def test_against_findmnt(self):
         psutil_value = RootFsDeviceFinder().find()
         findmnt_value = sh("findmnt -o SOURCE -rn /")
         self.assertEqual(psutil_value, findmnt_value)
 
+    @unittest.skip("Broken for oe")
     def test_disk_partitions_mocked(self):
         with mock.patch(
                 'psutil._pslinux.cext.disk_partitions',
diff --git a/psutil/tests/test_misc.py b/psutil/tests/test_misc.py
index d946eb6..121004a 100755
--- a/psutil/tests/test_misc.py
+++ b/psutil/tests/test_misc.py
@@ -54,6 +54,8 @@ from psutil.tests import unittest
 # ===================================================================
 
 
+PSUTIL_DEBUG = bool(os.getenv('PSUTIL_DEBUG', 0))
+
 class TestMisc(PsutilTestCase):
 
     def test_process__repr__(self, func=repr):
@@ -368,6 +370,7 @@ class TestMisc(PsutilTestCase):
 
     # XXX: https://github.com/pypa/setuptools/pull/2896
     @unittest.skipIf(APPVEYOR, "temporarily disabled due to setuptools bug")
+    @unittest.skip("OE run this test outof source tree")
     def test_setup_script(self):
         setup_py = os.path.join(ROOT_DIR, 'setup.py')
         if CI_TESTING and not os.path.exists(setup_py):
@@ -401,6 +404,7 @@ class TestMisc(PsutilTestCase):
                 reload_module(psutil)
             self.assertIn("version conflict", str(cm.exception).lower())
 
+    @unittest.skipIf(not PSUTIL_DEBUG, "env PSUTIL_DEBUG not set")
     def test_debug(self):
         if PY3:
             from io import StringIO
diff --git a/psutil/tests/test_process.py b/psutil/tests/test_process.py
index c9059e3..a34ba3d 100755
--- a/psutil/tests/test_process.py
+++ b/psutil/tests/test_process.py
@@ -36,6 +36,7 @@ from psutil._compat import PY3
 from psutil._compat import FileNotFoundError
 from psutil._compat import long
 from psutil._compat import super
+from psutil._compat import which
 from psutil.tests import APPVEYOR
 from psutil.tests import CI_TESTING
 from psutil.tests import GITHUB_ACTIONS
@@ -726,6 +727,7 @@ class TestProcess(PsutilTestCase):
             self.assertEqual(' '.join(p.cmdline()), ' '.join(cmdline))
 
     @unittest.skipIf(PYPY, "broken on PYPY")
+    @unittest.skipIf(not which("gcc"), "gcc not installed")
     def test_long_cmdline(self):
         testfn = self.get_testfn()
         create_exe(testfn)
@@ -740,6 +742,7 @@ class TestProcess(PsutilTestCase):
         assert pyexe.startswith(name), (pyexe, name)
 
     @unittest.skipIf(PYPY, "unreliable on PYPY")
+    @unittest.skipIf(not which("gcc"), "gcc not installed")
     def test_long_name(self):
         testfn = self.get_testfn(suffix="0123456789" * 2)
         create_exe(testfn)
@@ -750,6 +753,7 @@ class TestProcess(PsutilTestCase):
     @unittest.skipIf(SUNOS, "broken on SUNOS")
     @unittest.skipIf(AIX, "broken on AIX")
     @unittest.skipIf(PYPY, "broken on PYPY")
+    @unittest.skipIf(not which("gcc"), "gcc not installed")
     def test_prog_w_funky_name(self):
         # Test that name(), exe() and cmdline() correctly handle programs
         # with funky chars such as spaces and ")", see:
@@ -1408,6 +1412,7 @@ class TestProcess(PsutilTestCase):
 
     @unittest.skipIf(not HAS_ENVIRON, "not supported")
     @unittest.skipIf(not POSIX, "POSIX only")
+    @unittest.skipIf(not which("gcc"), "gcc not installed")
     def test_weird_environ(self):
         # environment variables can contain values without an equals sign
         code = textwrap.dedent("""
diff --git a/psutil/tests/test_system.py b/psutil/tests/test_system.py
index db2cb34..5ee519f 100755
--- a/psutil/tests/test_system.py
+++ b/psutil/tests/test_system.py
@@ -580,6 +580,7 @@ class TestDiskAPIs(PsutilTestCase):
     def test_disk_usage_bytes(self):
         psutil.disk_usage(b'.')
 
+    @unittest.skip("Broken for oe")
     def test_disk_partitions(self):
         def check_ntuple(nt):
             self.assertIsInstance(nt.device, str)
diff --git a/psutil/tests/test_unicode.py b/psutil/tests/test_unicode.py
index e635726..7ba5b0f 100755
--- a/psutil/tests/test_unicode.py
+++ b/psutil/tests/test_unicode.py
@@ -86,6 +86,7 @@ from psutil import POSIX
 from psutil import WINDOWS
 from psutil._compat import PY3
 from psutil._compat import u
+from psutil._compat import which
 from psutil.tests import APPVEYOR
 from psutil.tests import ASCII_FS
 from psutil.tests import CI_TESTING
@@ -156,7 +157,7 @@ def try_unicode(suffix):
 # FS APIs
 # ===================================================================
 
-
+@unittest.skipIf(not which("gcc"), "gcc not installed")
 class BaseUnicodeTest(PsutilTestCase):
     funky_suffix = None
 
@@ -169,6 +170,7 @@ class BaseUnicodeTest(PsutilTestCase):
 @serialrun
 @unittest.skipIf(ASCII_FS, "ASCII fs")
 @unittest.skipIf(PYPY and not PY3, "too much trouble on PYPY2")
+@unittest.skipIf(not which("gcc"), "gcc not installed")
 class TestFSAPIs(BaseUnicodeTest):
     """Test FS APIs with a funky, valid, UTF8 path name."""
 
-- 
2.25.1

