Reactorcide

← Back to Jobs

test-python

failed exit: 1

Triggered by eval job 019c8256-a1e8-9584-f4aa-7c6d2a2ffa68

Job ID
019c8256-d561-09bf-322a-bf36842ed5e0
Created
2026-02-21 22:34:14 UTC
Updated
2026-02-21 22:34:14 UTC
Duration
1m 12s
Source Ref
9804f3c6f946eb3b9949ef1cad0047fc4cfe84ab
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-02-21T22:34:25.799724585ZCloning into '/workspace'...
2026-02-21T22:35:09.618230973Z=== Running Python Tests ===
2026-02-21T22:35:09.89415182ZUsing CPython 3.13.12 interpreter at: /usr/local/bin/python3.13
2026-02-21T22:35:09.894159352ZCreating virtual environment at: .venv
2026-02-21T22:35:09.956858369Z Building runnerlib @ file:///workspace/runnerlib
2026-02-21T22:35:10.057570018ZDownloading cryptography (4.3MiB)
2026-02-21T22:35:10.085213947ZDownloading pygments (1.2MiB)
2026-02-21T22:35:10.786554155Z Downloaded cryptography
2026-02-21T22:35:10.938510771Z Downloaded pygments
2026-02-21T22:35:11.939223534Z Built runnerlib @ file:///workspace/runnerlib
2026-02-21T22:35:11.946334668Zwarning: Failed to hardlink files; falling back to full copy. This may lead to degraded performance.
2026-02-21T22:35:11.946349434Z If the cache and target directories are on different filesystems, hardlinking may not be supported.
2026-02-21T22:35:11.946360111Z If this is intentional, set `export UV_LINK_MODE=copy` or use `--link-mode=copy` to suppress this warning.
2026-02-21T22:35:12.071092953ZInstalled 22 packages in 127ms
2026-02-21T22:35:15.450090281Z============================= test session starts ==============================
2026-02-21T22:35:15.450099055Zplatform linux -- Python 3.13.12, pytest-8.3.5, pluggy-1.6.0
2026-02-21T22:35:15.450102875Zrootdir: /workspace/runnerlib
2026-02-21T22:35:15.450106005Zconfigfile: pyproject.toml
2026-02-21T22:35:15.450109148Zplugins: cov-7.0.0
2026-02-21T22:35:15.450111918Zcollected 381 items
2026-02-21T22:35:15.450114328Z
2026-02-21T22:35:15.487775222Ztests/test_config.py .................... [ 5%]
2026-02-21T22:35:15.504536806Ztests/test_container_advanced.py ......... [ 7%]
2026-02-21T22:35:15.512769986Ztests/test_container_isolation.py .... [ 8%]
2026-02-21T22:35:15.551199762Ztests/test_container_validation.py ................... [ 13%]
2026-02-21T22:35:15.677352497Ztests/test_directory_operations.py ............ [ 16%]
2026-02-21T22:35:15.763583208Ztests/test_eval.py ..................................................... [ 30%]
2026-02-21T22:35:15.790350061Z............. [ 34%]
2026-02-21T22:35:16.279615046Ztests/test_eval_cli.py ..................... [ 39%]
2026-02-21T22:35:18.033570126Ztests/test_git_operations.py .......... [ 42%]
2026-02-21T22:35:18.587665996Ztests/test_git_ops.py ....... [ 44%]
2026-02-21T22:35:19.161341087Ztests/test_integration.py ........... [ 46%]
2026-02-21T22:35:19.941302549Ztests/test_job_isolation.py ...F [ 48%]
2026-02-21T22:35:20.06873876Ztests/test_plugins.py ....................... [ 54%]
2026-02-21T22:35:20.131302379Ztests/test_register_secret.py ............ [ 57%]
2026-02-21T22:35:20.625593988Ztests/test_secrets.py ................... [ 62%]
2026-02-21T22:35:25.805138662Ztests/test_secrets_local.py ............................ [ 69%]
2026-02-21T22:35:25.843005541Ztests/test_secrets_resolver.py ............................. [ 77%]
2026-02-21T22:35:31.319246788Ztests/test_secrets_server.py ........ [ 79%]
2026-02-21T22:35:32.525069545Ztests/test_source_preparation.py ............... [ 83%]
2026-02-21T22:35:32.634752489Ztests/test_validation.py ........................... [ 90%]
2026-02-21T22:35:32.821946961Ztests/test_workflow.py ..................................... [100%]
2026-02-21T22:35:32.821955218Z
2026-02-21T22:35:32.821960464Z=================================== FAILURES ===================================
2026-02-21T22:35:32.821971848Z_______________ TestJobIsolation.test_container_mount_isolation ________________
2026-02-21T22:35:32.821974274Z
2026-02-21T22:35:32.821979124Zself = <runnerlib.tests.test_job_isolation.TestJobIsolation object at 0x7f76edb836f0>
2026-02-21T22:35:32.821983348Zmock_popen = <MagicMock name='Popen' id='140148770388160'>
2026-02-21T22:35:32.822087042Z
2026-02-21T22:35:32.822343455Z @patch('subprocess.Popen')
2026-02-21T22:35:32.822351308Z def test_container_mount_isolation(self, mock_popen):
2026-02-21T22:35:32.82291749Z """Test that containers mount only their job's directory."""
2026-02-21T22:35:32.8229271Z # Mock the Popen object with proper behavior
2026-02-21T22:35:32.822935177Z mock_process = MagicMock()
2026-02-21T22:35:32.823269326Z mock_process.poll.side_effect = [None, None, 0] # Running, running, then finished
2026-02-21T22:35:32.823276409Z mock_process.returncode = 0
2026-02-21T22:35:32.823281384Z mock_process.stdout.readline.return_value = '' # No output (text mode)
2026-02-21T22:35:32.823287785Z mock_process.stderr.readline.return_value = '' # No errors
2026-02-21T22:35:32.823295132Z mock_process.communicate.return_value = ('', '') # Empty re[REDACTED]ing output
2026-02-21T22:35:32.823644923Z mock_popen.return_value = mock_process
2026-02-21T22:35:32.823650849Z
2026-02-21T22:35:32.823655314Z with tempfile.TemporaryDirectory() as temp_dir:
2026-02-21T22:35:32.823659074Z # Save original cwd if possible
2026-02-21T22:35:32.823998434Z try:
2026-02-21T22:35:32.824006047Z original_cwd = os.getcwd()
2026-02-21T22:35:32.824010041Z except FileNotFoundError:
2026-02-21T22:35:32.824014985Z # If current dir doesn't exist, use temp dir as fallback
2026-02-21T22:35:32.824299574Z original_cwd = temp_dir
2026-02-21T22:35:32.824367195Z
2026-02-21T22:35:32.824373098Z try:
2026-02-21T22:35:32.824377245Z os.chdir(temp_dir)
2026-02-21T22:35:32.82465416Z
2026-02-21T22:35:32.82466125Z config = RunnerConfig(
2026-02-21T22:35:32.824665424Z code_dir="/job/src",
2026-02-21T22:35:32.825418728Z job_dir="/job/src",
2026-02-21T22:35:32.825428858Z job_command="echo test",
2026-02-21T22:35:32.825433435Z runner_image="alpine:latest"
2026-02-21T22:35:32.825437995Z )
2026-02-21T22:35:32.825440968Z
2026-02-21T22:35:32.825565059Z # Prepare job directory
2026-02-21T22:35:32.825570315Z job_path = prepare_job_directory(config)
2026-02-21T22:35:32.825572789Z
2026-02-21T22:35:32.825576367Z # Create a test file
2026-02-21T22:35:32.825580346Z test_file = job_path / "test.txt"
2026-02-21T22:35:32.825583576Z test_file.write_text("test data")
2026-02-21T22:35:32.825588973Z
2026-02-21T22:35:32.825596269Z # Run container
2026-02-21T22:35:32.825985095Z> run_container(config)
2026-02-21T22:35:32.825988972Z
2026-02-21T22:35:32.825992424Z/workspace/runnerlib/tests/test_job_isolation.py:257:
2026-02-21T22:35:32.826285075Z_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
2026-02-21T22:35:32.826288122Z
2026-02-21T22:35:32.826295516Zconfig = RunnerConfig(code_dir='/job/src', job_dir='/job/src', job_command='echo test', runner_image='alpine:latest', job_env=N...=None, source_type=None, source_url=None, source_ref=None, ci_source_type=None, ci_source_url=None, ci_source_ref=None)
2026-02-21T22:35:32.826299005Zadditional_args = None
2026-02-21T22:35:32.826744685Z
2026-02-21T22:35:32.826754311Z def run_container(
2026-02-21T22:35:32.826758158Z config: RunnerConfig,
2026-02-21T22:35:32.826762618Z additional_args: Optional[List[str]] = None
2026-02-21T22:35:32.827013571Z ) -> int:
2026-02-21T22:35:32.827021624Z """Run the job container using docker with full configuration support.
2026-02-21T22:35:32.827024351Z
2026-02-21T22:35:32.827378371Z Args:
2026-02-21T22:35:32.827383971Z config: Runner configuration
2026-02-21T22:35:32.827389448Z additional_args: Additional arguments to pass to the job command
2026-02-21T22:35:32.827395764Z
2026-02-21T22:35:32.827724278Z Returns:
2026-02-21T22:35:32.827731428Z Exit code of the container process
2026-02-21T22:35:32.82801435Z
2026-02-21T22:35:32.828022487Z Raises:
2026-02-21T22:35:32.828026973Z ValueError: If configuration is invalid
2026-02-21T22:35:32.828369727Z FileNotFoundError: If docker is not available
2026-02-21T22:35:32.828376161Z """
2026-02-21T22:35:32.828380717Z # Create plugin context for the execution
2026-02-21T22:35:32.828774421Z plugin_context = PluginContext(
2026-02-21T22:35:32.828779521Z config=config,
2026-02-21T22:35:32.828790918Z phase=PluginPhase.PRE_SOURCE_PREP,
2026-02-21T22:35:32.828794411Z metadata={}
2026-02-21T22:35:32.828838301Z )
2026-02-21T22:35:32.828841706Z
2026-02-21T22:35:32.828845616Z try:
2026-02-21T22:35:32.829439955Z # Execute pre-source-prep plugins
2026-02-21T22:35:32.829446672Z plugin_manager.execute_phase(PluginPhase.PRE_SOURCE_PREP, plugin_context)
2026-02-21T22:35:32.829449425Z
2026-02-21T22:35:32.829453835Z # Basic validation is handled by CLI layer
2026-02-21T22:35:32.829456755Z
2026-02-21T22:35:32.829460405Z # Check if docker is available
2026-02-21T22:35:32.829788145Z if not shutil.which("docker"):
2026-02-21T22:35:32.829794108Z logger.error("Docker is not available in PATH")
2026-02-21T22:35:32.829799155Z> raise FileNotFoundError("docker is not available in PATH")
2026-02-21T22:35:32.829803228ZE FileNotFoundError: docker is not available in PATH
2026-02-21T22:35:32.829934529Z
2026-02-21T22:35:32.830050241Z/workspace/runnerlib/src/container.py:114: FileNotFoundError
2026-02-21T22:35:32.830259686Z----------------------------- Captured stderr call -----------------------------
2026-02-21T22:35:32.830266336Z2026-02-21T22:35:19.803263+00:00 [ERROR] [runnerlib] Docker is not available in PATH
2026-02-21T22:35:32.830505452Z=========================== short test summary info ============================
2026-02-21T22:35:32.830512615ZFAILED tests/test_job_isolation.py::TestJobIsolation::test_container_mount_isolation
2026-02-21T22:35:32.830695234Z======================== 1 failed, 380 passed in 19.56s ========================