summaryrefslogtreecommitdiff
path: root/zephyr/zmake/tests/test_jobserver.py
diff options
context:
space:
mode:
authorYH Lin <yueherngl@chromium.org>2022-12-03 00:19:30 +0000
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-12-05 17:43:05 +0000
commitc8af732351cc5c7167f27e8390e26f0556f53a5a (patch)
treebdff671e5ad3e71e30ab56f4f084f34a2fd72e28 /zephyr/zmake/tests/test_jobserver.py
parentaf25602b15b22b9ef5821dcba9934311f2157c48 (diff)
downloadchrome-ec-factory-brya-14517.B-main.tar.gz
Revert "Merge remote-tracking branch cros/main into factory-brya-14517.B-main"factory-brya-14517.B-main
This reverts commit af25602b15b22b9ef5821dcba9934311f2157c48. Reason for revert: broken build due to ec-utils. Original change's description: > Merge remote-tracking branch cros/main into factory-brya-14517.B-main > > Generated by: util/update_release_branch.py --baseboard brya --relevant_paths_file > baseboard/brya/relevant-paths.txt factory-brya-14517.B-main > > Relevant changes: > > git log --oneline 54462f034b..aa40b859b3 -- baseboard/brya board/agah > board/anahera board/banshee board/brya board/crota board/felwinter > board/gimble board/kano board/mithrax board/osiris board/primus > board/redrix board/taeko board/taniks board/vell board/volmar > driver/bc12/pi3usb9201_public.* driver/charger/bq25710.* > driver/ppc/nx20p348x.* driver/ppc/syv682x_public.* > driver/retimer/bb_retimer_public.* driver/tcpm/nct38xx.* > driver/tcpm/ps8xxx_public.* driver/tcpm/tcpci.* include/power/alderlake* > include/intel_x86.h power/alderlake* power/intel_x86.c > util/getversion.sh > > e6da633c38 driver: Sort header files > 234a87ae2d tcpci: Add FRS enable to driver structure > a56be59ccd tcpm_header: add test for tcpm_dump_registers > 57b3256963 Rename CONFIG_CHARGER_INPUT_CURRENT to _CHARGER_DEFAULT_CURRENT_LIMIT > e420c8ff9a marasov: Modify TypeC and TypeA configuration. > 43b53e0045 Add default implementation of board_set_charge_limit > b75dc90677 Add CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT > f1b563c350 baseboard: Sort header files > 7d01b1e58d driver/retimer/ps8818.h: Add I2C ADDR FLAGS 0x30, 0x58, 0x70 > ec31407993 Add CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT > 8f89f69a5b crota: disable lid angle sensor for clamshell > > BRANCH=None > BUG=b:259002141 b:255184961 b:247100970 b:259354679 b:260630630 > BUG=b:163093572 b:254328661 > TEST=`emerge-brya chromeos-ec` > > Force-Relevant-Builds: all > Change-Id: Ia85a701fbf6b8e67ec214b9e25e0e55e980a6f47 > Signed-off-by: YH Lin <yueherngl@google.com> Bug: b:259002141 b:255184961 b:247100970 b:259354679 b:260630630 Bug: b:163093572 b:254328661 Change-Id: I48d5aa4cc67a69ee1f6ac9255ac3087d34da4c72 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4077248 Tested-by: YH Lin <yueherngl@chromium.org> Commit-Queue: YH Lin <yueherngl@chromium.org> Reviewed-by: Boris Mittelberg <bmbm@google.com> Auto-Submit: YH Lin <yueherngl@chromium.org>
Diffstat (limited to 'zephyr/zmake/tests/test_jobserver.py')
-rw-r--r--zephyr/zmake/tests/test_jobserver.py201
1 files changed, 0 insertions, 201 deletions
diff --git a/zephyr/zmake/tests/test_jobserver.py b/zephyr/zmake/tests/test_jobserver.py
deleted file mode 100644
index a79e6dc280..0000000000
--- a/zephyr/zmake/tests/test_jobserver.py
+++ /dev/null
@@ -1,201 +0,0 @@
-# Copyright 2022 The ChromiumOS Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Test jobserver functionality."""
-
-import logging
-import os
-import threading
-from asyncio import subprocess
-
-import pytest # pylint:disable=import-error
-import zmake.jobserver
-
-
-def _do_test_jobserver(
- jobs, commandline_jobs=0, use_client=False, open_pipe=True
-):
- """Test a jobserver configured with a specified number of jobs."""
-
- effective_jobs = jobs
- pipe = None
- if use_client:
- makeflags = f" -j{jobs}"
- if jobs > 1:
- pipe = os.pipe()
- # GNU make puts one less job in the pipe than allowed, since you
- # get one job "for free" without contacting the jobserver. Or
- # another way of looking at is that make consumes one slot for you
- # before calling your job just in case you aren't jobserver aware.
- os.write(pipe[1], b"A" * (jobs - 1))
- os.set_inheritable(pipe[0], True)
- os.set_inheritable(pipe[1], True)
- makeflags += f" --jobserver-auth={pipe[0]},{pipe[1]}"
- if not open_pipe:
- os.close(pipe[0])
- os.close(pipe[1])
- effective_jobs = 1
- jobserver = zmake.jobserver.GNUMakeJobClient.from_environ(
- env={"MAKEFLAGS": makeflags}, jobs=commandline_jobs
- )
- else:
- jobserver = zmake.jobserver.GNUMakeJobServer(jobs=jobs)
- pipe = jobserver._inheritable_pipe # pylint:disable=protected-access
- if jobs == 1:
- makeflags = " -j1"
- else:
- makeflags = f" -j{jobs} --jobserver-auth={pipe[0]},{pipe[1]}"
-
- lock = threading.Condition()
- started_threads = 0
- ended_threads = 0
- active_threads = 0
- please_exit = threading.Semaphore(0)
- thread_count = jobs + 5
- if commandline_jobs:
- effective_jobs = commandline_jobs
-
- def _my_thread():
- nonlocal started_threads
- nonlocal active_threads
- nonlocal ended_threads
- nonlocal pipe
-
- with lock:
- started_threads += 1
- lock.notify_all()
- with jobserver.get_job():
- with lock:
- active_threads += 1
- lock.notify_all()
- proc = jobserver.popen(
- [
- "sh",
- "-c",
- 'echo "MAKEFLAGS=${MAKEFLAGS}"; ls /proc/self/fd',
- ],
- stdout=subprocess.PIPE,
- universal_newlines=True,
- )
- proc.wait()
- output = proc.stdout.readlines()
- assert output[0] == f"MAKEFLAGS={makeflags}\n"
- if pipe:
- if effective_jobs > 1:
- assert f"{pipe[0]}\n" in output
- assert f"{pipe[1]}\n" in output
- else:
- assert f"{pipe[0]}\n" not in output
- assert f"{pipe[1]}\n" not in output
-
- please_exit.acquire() # pylint:disable=consider-using-with
- with lock:
- active_threads -= 1
- ended_threads += 1
- lock.notify_all()
-
- logging.debug("Starting %s threads", thread_count)
- for _ in range(thread_count):
- threading.Thread(target=_my_thread, daemon=True).start()
-
- with lock:
- lock.wait_for(
- lambda: started_threads == thread_count
- and active_threads == effective_jobs,
- 10,
- )
- logging.debug("Asserting %s active_threads", effective_jobs)
- assert started_threads == thread_count
- assert active_threads == effective_jobs
- assert ended_threads == 0
-
- logging.debug("Ending %s threads", 5)
- for _ in range(5):
- please_exit.release()
-
- with lock:
- lock.wait_for(
- lambda: active_threads == effective_jobs and ended_threads == 5, 10
- )
- logging.debug("Asserting %s active_threads", effective_jobs)
- assert started_threads == thread_count
- assert active_threads == effective_jobs
- assert ended_threads == 5
-
- logging.debug("Ending %s threads", thread_count - 5)
- for _ in range(thread_count - 5):
- please_exit.release()
-
- with lock:
- lock.wait_for(lambda: ended_threads == thread_count, 10)
- logging.debug("Asserting %s active_threads", 0)
- assert started_threads == thread_count
- assert active_threads == 0
- assert ended_threads == thread_count
-
-
-def test_jobserver_10():
- """Test a jobserver configured with 10 jobs."""
- _do_test_jobserver(10)
-
-
-def test_jobserver_2():
- """Test a jobserver configured with 2 jobs."""
- _do_test_jobserver(2)
-
-
-def test_jobserver_1():
- """Test a jobserver configured with 1 job."""
- _do_test_jobserver(1)
-
-
-def test_jobclient_10():
- """Test a jobclient configured with 10 jobs."""
- _do_test_jobserver(10, use_client=True)
-
-
-def test_jobclient_2():
- """Test a jobserver configured with 2 jobs."""
- _do_test_jobserver(2, use_client=True)
-
-
-def test_jobclient_1():
- """Test a jobserver configured with 1 job."""
- _do_test_jobserver(1, use_client=True)
-
-
-def test_jobclient_10_j1():
- """Test a jobclient configured with 10 jobs but zmake -j1 was called."""
- _do_test_jobserver(10, commandline_jobs=1, use_client=True)
-
-
-def test_jobclient_1_j1():
- """Test a jobserver configured with 1 job but zmake -j1 was called."""
- _do_test_jobserver(1, commandline_jobs=1, use_client=True)
-
-
-def test_jobclient_missing():
- """Test a jobclient with no MAKEFLAGS."""
- jobserver = zmake.jobserver.GNUMakeJobClient.from_environ(env={})
- assert jobserver is None
-
-
-def test_jobclient_dryrun():
- """Test a jobclient make dryrun in MAKEFLAGS."""
- with pytest.raises(SystemExit) as pytest_wrapped_e:
- zmake.jobserver.GNUMakeJobClient.from_environ(
- env={"MAKEFLAGS": "n -j1"}
- )
- assert pytest_wrapped_e.type == SystemExit
- assert pytest_wrapped_e.value.code == 0
-
-
-def test_jobclient_10_no_pipes():
- """Test a jobclient configured with 10 jobs but the file descriptors are missing."""
- _do_test_jobserver(10, use_client=True, open_pipe=False)
-
-
-def test_jobclient_1_no_pipes():
- """Test a jobclient configured with 1 job but the file descriptors are missing."""
- _do_test_jobserver(1, use_client=True, open_pipe=False)