Offer runtime candidates across model categories and prepare audio.cpp with six build jobs
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
import tempfile
|
||||
import time
|
||||
import unittest
|
||||
from unittest.mock import patch
|
||||
from audio_cpp_runtime import AudioCppRuntime,REVISION
|
||||
|
||||
class AudioCppTests(unittest.TestCase):
|
||||
def test_marker_cannot_escape_root(self):
|
||||
with tempfile.TemporaryDirectory() as root:
|
||||
Path(root,'active.json').write_text(json.dumps({'id':'../../outside'}))
|
||||
self.assertFalse(AudioCppRuntime(root).status()['installed'])
|
||||
def test_build_failure_is_not_published(self):
|
||||
with tempfile.TemporaryDirectory() as root:
|
||||
runtime=AudioCppRuntime(root);runtime.job=dict(id='a'*32,state='running')
|
||||
with patch.object(runtime,'_command',side_effect=RuntimeError('synthetic failure')):runtime._run()
|
||||
self.assertEqual(runtime.job['state'],'failed')
|
||||
self.assertFalse(runtime.status()['installed'])
|
||||
self.assertFalse(Path(root,'a'*32,'ready').exists())
|
||||
def test_publish_only_after_cli_smoke_and_spec(self):
|
||||
with tempfile.TemporaryDirectory() as root:
|
||||
runtime=AudioCppRuntime(root);runtime.job=dict(id='a'*32,state='running');commands=[]
|
||||
def command(args,env):
|
||||
commands.append([str(a) for a in args])
|
||||
base=Path(root,'a'*32)
|
||||
if str(args[0])=='cmake' and '--build' in args:
|
||||
(base/'source/model_specs').mkdir(parents=True)
|
||||
(base/'source/model_specs/yue2.json').write_text('{}')
|
||||
(base/'build/bin').mkdir(parents=True)
|
||||
(base/'build/bin/audiocpp_cli').touch()
|
||||
with patch.object(runtime,'_command',side_effect=command),patch('subprocess.check_output',return_value='12.0\n8.6\n'):runtime._run()
|
||||
self.assertEqual(runtime.job['state'],'complete')
|
||||
self.assertTrue(runtime.status()['installed'])
|
||||
self.assertFalse(runtime.status()['adapter_ready'])
|
||||
self.assertIn('-DCMAKE_CUDA_ARCHITECTURES=120;86',commands[3])
|
||||
self.assertEqual(commands[-1][-1],'--help')
|
||||
self.assertEqual(Path(root,'a'*32,'ready').read_text(),REVISION)
|
||||
def test_missing_prerequisites_dont_start_thread(self):
|
||||
with tempfile.TemporaryDirectory() as root:
|
||||
runtime=AudioCppRuntime(root)
|
||||
with patch('audio_cpp_runtime.sys.platform','linux'),patch('audio_cpp_runtime.shutil.which',return_value=None):
|
||||
with self.assertRaisesRegex(ValueError,'Build-Werkzeuge fehlen'):runtime.start()
|
||||
self.assertIsNone(runtime.worker)
|
||||
Reference in New Issue
Block a user