Skip to content

testMultipleThreads failed #105

Description

@bmwiedemann

While working on reproducible builds for openSUSE, I found that
our python-snimpy 1.0.1 package can get stuck during tests or fail like this (in a 1-core VM):

=================================== FAILURES ===================================
________________________ TestSnmp3.testMultipleThreads _________________________

self = <test_snmp.TestSnmp3 testMethod=testMultipleThreads>

    @unittest.skipIf(platform.python_implementation() == "PyPy",
                     "unreliable test with Pypy")
    def testMultipleThreads(self):
        """Test with multiple sessions in different threads."""
        count = 20
        agents = []
        for i in range(count):
            agents.append(self.addAgent('community{}'.format(i),
                                        'community{}-authpass'.format(i),
                                        'community{}-privpass'.format(i)))
        ooid = mib.get('SNMPv2-MIB', 'sysDescr').oid + (0,)

        threads = []
        successes = []
        failures = []
        lock = multiprocessing.Lock()

        # Start one thread
        def run(i):
            params = self.setUpSession(agents[i], 'community{}'.format(i))
            session = snmp.Session(**params)
            session.timeout = 10 * 1000 * 1000
            oid, a = session.get(ooid)[0]
            exp = ("Snimpy Test Agent community{}".format(i)).encode('ascii')
            with lock:
                if oid == ooid and \
                   a == exp:
                    successes.append("community{}".format(i))
                else:
                    failures.append("community{}".format(i))
        for i in range(count):
            threads.append(threading.Thread(target=run, args=(i,)))
        for i in range(count):
            threads[i].start()
        for i in range(count):
            threads[i].join()
        self.assertEqual(failures, [])
>       self.assertEqual(sorted(successes),
                         sorted(["community{}".format(i)
                                 for i in range(count)]))
E       AssertionError: Lists differ: ['com[16 chars]nity10', 'community11', 'community12', 'commun[204 chars]ty9'] != ['com[16 chars]nity1', 'community10', 'community11', 'communi[218 chars]ty9']
E
E       First differing element 1:
E       'community10'
E       'community1'
E
E       Second list contains 1 additional elements.
E       First extra element 19:
E       'community9'
E
E         ['community0',
E       +  'community1',
E          'community10',
E          'community11',
E          'community12',
E          'community13',
E          'community14',
E          'community15',
E          'community16',
E          'community17',
E          'community18',
E          'community19',
E          'community2',
E          'community3',
E          'community4',
E          'community5',
E          'community6',
E          'community7',
E          'community8',
E          'community9']

tests/test_snmp.py:353: AssertionError
=============================== warnings summary ===============================
tests/test_snmp.py::TestSnmp3::testMultipleThreads
  /usr/lib/python3.9/site-packages/_pytest/threadexception.py:73: PytestUnhandledThreadExceptionWarning: Exception in thread Thread-42

  Traceback (most recent call last):
    File "/usr/lib64/python3.9/threading.py", line 980, in _bootstrap_inner
      self.run()
    File "/usr/lib64/python3.9/threading.py", line 917, in run
      self._target(*self._args, **self._kwargs)
    File "/home/abuild/rpmbuild/BUILD/snimpy-1.0.1/tests/test_snmp.py", line 338, in run
      oid, a = session.get(ooid)[0]
    File "/home/abuild/rpmbuild/BUILDROOT/python-snimpy-1.0.1-0.0.x86_64/usr/lib64/python3.9/site-packages/snimpy/snmp.py", line 296, in get
      return self._op(self._cmdgen.getCmd, *oids)
    File "/home/abuild/rpmbuild/BUILDROOT/python-snimpy-1.0.1-0.0.x86_64/usr/lib64/python3.9/site-packages/snimpy/snmp.py", line 268, in _op
      raise SNMPException(str(errorIndication))
  snimpy.snmp.SNMPException: No SNMP response received before timeout

    warnings.warn(pytest.PytestUnhandledThreadExceptionWarning(msg))

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED tests/test_snmp.py::TestSnmp3::testMultipleThreads - AssertionError: L...
======== 1 failed, 265 passed, 1 xfailed, 1 warning in 89.60s (0:01:29) ========

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions