Reactorcide

← Back to Jobs

test-python

failed exit: 1

Triggered by eval job 019d5f5e-490d-58d4-72dc-a66d9ffcbccc

Job ID
019d5f5e-8b5c-7e35-9948-f642b929b360
Created
2026-04-05 20:38:44 UTC
Updated
2026-04-05 20:38:44 UTC
Duration
1m 35s
Source Ref
f259a2f0333969316730625e3af00f2a12674aa6
Source URL
https://github.com/catalystcommunity/reactorcide.git
Runner Image
10.16.0.1:5000/public/reactorcide/runnerbase:dev
Priority
10
Queue
reactorcide-jobs

Logs

2026-04-05T20:39:10.308457826ZCloning into '/workspace'...
2026-04-05T20:40:13.848936234ZUpdating files: 99% (346/347) Updating files: 100% (347/347) Updating files: 100% (347/347), done.
2026-04-05T20:40:13.853604141Z=== Running Python Tests ===
2026-04-05T20:40:14.138668309ZUsing CPython 3.13.12 interpreter at: /usr/local/bin/python3.13
2026-04-05T20:40:14.138681529ZCreating virtual environment at: .venv
2026-04-05T20:40:14.207959583Z Building runnerlib @ file:///workspace/runnerlib
2026-04-05T20:40:14.478217358ZDownloading pygments (1.2MiB)
2026-04-05T20:40:14.480088277ZDownloading cryptography (4.3MiB)
2026-04-05T20:40:16.500541562Z Downloaded pygments
2026-04-05T20:40:16.65664734Z Built runnerlib @ file:///workspace/runnerlib
2026-04-05T20:40:19.224897445Z Downloaded cryptography
2026-04-05T20:40:19.228742702Zwarning: Failed to hardlink files; falling back to full copy. This may lead to degraded performance.
2026-04-05T20:40:19.22875082Z If the cache and target directories are on different filesystems, hardlinking may not be supported.
2026-04-05T20:40:19.228759306Z If this is intentional, set `export UV_LINK_MODE=copy` or use `--link-mode=copy` to suppress this warning.
2026-04-05T20:40:19.451047128ZInstalled 22 packages in 223ms
2026-04-05T20:40:22.963080187Z============================= test session starts ==============================
2026-04-05T20:40:22.963090441Zplatform linux -- Python 3.13.12, pytest-8.3.5, pluggy-1.6.0
2026-04-05T20:40:22.963095347Zrootdir: /workspace/runnerlib
2026-04-05T20:40:22.963099444Zconfigfile: pyproject.toml
2026-04-05T20:40:22.963104144Zplugins: cov-7.0.0
2026-04-05T20:40:22.963108041Zcollected 381 items
2026-04-05T20:40:22.963111491Z
2026-04-05T20:40:23.003160814Ztests/test_config.py .................... [ 5%]
2026-04-05T20:40:23.020693414Ztests/test_container_advanced.py ......... [ 7%]
2026-04-05T20:40:23.02980825Ztests/test_container_isolation.py .... [ 8%]
2026-04-05T20:40:23.065791387Ztests/test_container_validation.py ................... [ 13%]
2026-04-05T20:40:23.188619343Ztests/test_directory_operations.py ............ [ 16%]
2026-04-05T20:40:23.275587877Ztests/test_eval.py ..................................................... [ 30%]
2026-04-05T20:40:23.302467834Z............. [ 34%]
2026-04-05T20:40:23.785668296Ztests/test_eval_cli.py ..................... [ 39%]
2026-04-05T20:40:25.516562674Ztests/test_git_operations.py .......... [ 42%]
2026-04-05T20:40:26.064425117Ztests/test_git_ops.py ....... [ 44%]
2026-04-05T20:40:26.639708733Ztests/test_integration.py ........... [ 46%]
2026-04-05T20:40:28.416931035Ztests/test_job_isolation.py .F.. [ 48%]
2026-04-05T20:40:28.560257976Ztests/test_plugins.py ....................... [ 54%]
2026-04-05T20:40:28.62675094Ztests/test_register_secret.py ............ [ 57%]
2026-04-05T20:40:29.103622114Ztests/test_secrets.py ................... [ 62%]
2026-04-05T20:40:34.252843105Ztests/test_secrets_local.py ............................ [ 69%]
2026-04-05T20:40:34.295319007Ztests/test_secrets_resolver.py ............................. [ 77%]
2026-04-05T20:40:39.781155844Ztests/test_secrets_server.py ........ [ 79%]
2026-04-05T20:40:41.021963096Ztests/test_source_preparation.py ............... [ 83%]
2026-04-05T20:40:41.113981381Ztests/test_validation.py ........................... [ 90%]
2026-04-05T20:40:41.292283708Ztests/test_workflow.py ..................................... [100%]
2026-04-05T20:40:41.292291424Z
2026-04-05T20:40:41.292295638Z=================================== FAILURES ===================================
2026-04-05T20:40:41.292467785Z________________ TestJobIsolation.test_concurrent_job_isolation ________________
2026-04-05T20:40:41.292486455Z
2026-04-05T20:40:41.292494945Zself = <runnerlib.tests.test_job_isolation.TestJobIsolation object at 0x7efc7811d090>
2026-04-05T20:40:41.292905165Z
2026-04-05T20:40:41.292915035Z def test_concurrent_job_isolation(self):
2026-04-05T20:40:41.293040146Z """Test that concurrent jobs don't interfere with each other."""
2026-04-05T20:40:41.293053203Z import threading
2026-04-05T20:40:41.293329648Z import time
2026-04-05T20:40:41.293334878Z
2026-04-05T20:40:41.293796918Z results = {}
2026-04-05T20:40:41.293801724Z errors = {}
2026-04-05T20:40:41.293803751Z
2026-04-05T20:40:41.294086243Z def run_job(job_id: str, work_dir: str):
2026-04-05T20:40:41.294095766Z """Run a job in its own work directory."""
2026-04-05T20:40:41.294349637Z try:
2026-04-05T20:40:41.294354547Z original_cwd = os.getcwd()
2026-04-05T20:40:41.294357377Z os.chdir(work_dir)
2026-04-05T20:40:41.294359294Z
2026-04-05T20:40:41.294655197Z config = RunnerConfig(
2026-04-05T20:40:41.294661244Z code_dir="/job/src",
2026-04-05T20:40:41.294892715Z job_dir="/job/src",
2026-04-05T20:40:41.294896675Z job_command=f"echo 'job-{job_id}'",
2026-04-05T20:40:41.295044016Z runner_image="alpine:latest"
2026-04-05T20:40:41.295049916Z )
2026-04-05T20:40:41.295194207Z
2026-04-05T20:40:41.295200683Z job_path = prepare_job_directory(config)
2026-04-05T20:40:41.295202677Z
2026-04-05T20:40:41.295411148Z # Create a unique file for this job
2026-04-05T20:40:41.295650956Z test_file = job_path / f"job-{job_id}.txt"
2026-04-05T20:40:41.295655433Z test_file.write_text(f"Data for job {job_id}")
2026-04-05T20:40:41.295657506Z
2026-04-05T20:40:41.295843301Z # Simulate some work
2026-04-05T20:40:41.296110146Z time.sleep(0.1)
2026-04-05T20:40:41.296495939Z
2026-04-05T20:40:41.296506176Z # Verify the file still exists and has correct content
2026-04-05T20:40:41.296512336Z assert test_file.exists()
2026-04-05T20:40:41.296525222Z assert test_file.read_text() == f"Data for job {job_id}"
2026-04-05T20:40:41.296528569Z
2026-04-05T20:40:41.296532806Z # Check no files from other jobs exist
2026-04-05T20:40:41.296805998Z other_files = list(job_path.glob("job-*.txt"))
2026-04-05T20:40:41.296875561Z assert len(other_files) == 1
2026-04-05T20:40:41.296881938Z assert other_files[0].name == f"job-{job_id}.txt"
2026-04-05T20:40:41.296884951Z
2026-04-05T20:40:41.297365995Z results[job_id] = True
2026-04-05T20:40:41.297369132Z
2026-04-05T20:40:41.297372522Z except Exception as e:
2026-04-05T20:40:41.297375542Z errors[job_id] = str(e)
2026-04-05T20:40:41.297378808Z finally:
2026-04-05T20:40:41.297518113Z os.chdir(original_cwd)
2026-04-05T20:40:41.297521629Z
2026-04-05T20:40:41.297524336Z # Create temporary directories for each job
2026-04-05T20:40:41.297527289Z temp_dirs = []
2026-04-05T20:40:41.297529933Z threads = []
2026-04-05T20:40:41.297876988Z
2026-04-05T20:40:41.297883635Z try:
2026-04-05T20:40:41.297989428Z # Start multiple jobs concurrently
2026-04-05T20:40:41.297994215Z for i in range(5):
2026-04-05T20:40:41.298474352Z temp_dir = tempfile.mkdtemp(prefix=f"job-{i}-")
2026-04-05T20:40:41.298478965Z temp_dirs.append(temp_dir)
2026-04-05T20:40:41.298480755Z
2026-04-05T20:40:41.298483685Z thread = threading.Thread(
2026-04-05T20:40:41.298486662Z target=run_job,
2026-04-05T20:40:41.298690603Z args=(str(i), temp_dir)
2026-04-05T20:40:41.29869428Z )
2026-04-05T20:40:41.298702976Z thread.start()
2026-04-05T20:40:41.299189574Z threads.append(thread)
2026-04-05T20:40:41.299193044Z
2026-04-05T20:40:41.29919903Z # Wait for all jobs to complete
2026-04-05T20:40:41.299202427Z for thread in threads:
2026-04-05T20:40:41.299490315Z thread.join(timeout=5)
2026-04-05T20:40:41.299494028Z
2026-04-05T20:40:41.299503145Z # Verify all jobs succeeded
2026-04-05T20:40:41.299505775Z> assert len(errors) == 0, f"Jobs failed: {errors}"
2026-04-05T20:40:41.299511692ZE AssertionError: Jobs failed: {'2': "assert 2 == 1\n + where 2 = len([PosixPath('/tmp/job-3-z6gdpuq0/job/job-2.txt'), PosixPath('/tmp/job-3-z6gdpuq0/job/job-3.txt')])", '3': "assert 2 == 1\n + where 2 = len([PosixPath('/tmp/job-3-z6gdpuq0/job/job-2.txt'), PosixPath('/tmp/job-3-z6gdpuq0/job/job-3.txt')])"}
2026-04-05T20:40:41.300246267ZE assert 2 == 0
2026-04-05T20:40:41.300254387ZE + where 2 = len({'2': "assert 2 == 1\n + where 2 = len([PosixPath('/tmp/job-3-z6gdpuq0/job/job-2.txt'), PosixPath('/tmp/job-3-z6gdpuq...\n + where 2 = len([PosixPath('/tmp/job-3-z6gdpuq0/job/job-2.txt'), PosixPath('/tmp/job-3-z6gdpuq0/job/job-3.txt')])"})
2026-04-05T20:40:41.300255977Z
2026-04-05T20:40:41.300258864Z/workspace/runnerlib/tests/test_job_isolation.py:138: AssertionError
2026-04-05T20:40:41.300261731Z=========================== short test summary info ============================
2026-04-05T20:40:41.300503368ZFAILED tests/test_job_isolation.py::TestJobIsolation::test_concurrent_job_isolation
2026-04-05T20:40:41.300507122Z======================== 1 failed, 380 passed in 20.59s ========================