mirror of
https://github.com/nodejs/node.git
synced 2025-05-17 04:03:52 +00:00

PR-URL: https://github.com/nodejs/node/pull/44741 Fixes: https://github.com/nodejs/node/issues/44650 Fixes: https://github.com/nodejs/node/issues/37472 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Jiawen Geng <technicalcute@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
83 lines
2.3 KiB
Python
Executable File
83 lines
2.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# Copyright 2014 the V8 project authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import os
|
|
import sys
|
|
import unittest
|
|
|
|
from queue import Empty, Full, Queue
|
|
|
|
# Needed because the test runner contains relative imports.
|
|
TOOLS_PATH = os.path.dirname(
|
|
os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
sys.path.append(TOOLS_PATH)
|
|
|
|
from testrunner.local.pool import DefaultExecutionPool, drain_queue_async
|
|
|
|
|
|
def Run(x):
|
|
if x == 10:
|
|
raise Exception("Expected exception triggered by test.")
|
|
return x
|
|
|
|
|
|
class PoolTest(unittest.TestCase):
|
|
|
|
def testNormal(self):
|
|
results = set()
|
|
pool = DefaultExecutionPool()
|
|
pool.init(3)
|
|
for result in pool.imap_unordered(Run, [[x] for x in range(0, 10)]):
|
|
if result.heartbeat:
|
|
# Any result can be a heartbeat due to timings.
|
|
continue
|
|
results.add(result.value)
|
|
self.assertEqual(set(range(0, 10)), results)
|
|
|
|
def testException(self):
|
|
results = set()
|
|
pool = DefaultExecutionPool()
|
|
pool.init(3)
|
|
with self.assertRaises(Exception):
|
|
for result in pool.imap_unordered(Run, [[x] for x in range(0, 12)]):
|
|
if result.heartbeat:
|
|
# Any result can be a heartbeat due to timings.
|
|
continue
|
|
# Item 10 will not appear in results due to an internal exception.
|
|
results.add(result.value)
|
|
expect = set(range(0, 12))
|
|
expect.remove(10)
|
|
self.assertEqual(expect, results)
|
|
|
|
def testAdd(self):
|
|
results = set()
|
|
pool = DefaultExecutionPool()
|
|
pool.init(3)
|
|
for result in pool.imap_unordered(Run, [[x] for x in range(0, 10)]):
|
|
if result.heartbeat:
|
|
# Any result can be a heartbeat due to timings.
|
|
continue
|
|
results.add(result.value)
|
|
if result.value < 30:
|
|
pool.add([result.value + 20])
|
|
self.assertEqual(
|
|
set(range(0, 10)) | set(range(20, 30)) | set(range(40, 50)), results)
|
|
|
|
|
|
class QueueTest(unittest.TestCase):
|
|
def testDrainQueueAsync(self):
|
|
queue = Queue(1)
|
|
queue.put('foo')
|
|
with self.assertRaises(Full):
|
|
queue.put('bar', timeout=0.01)
|
|
with drain_queue_async(queue):
|
|
queue.put('bar')
|
|
with self.assertRaises(Empty):
|
|
queue.get(False)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|