|
""" |
|
ビルド結果をテストする |
|
""" |
|
import argparse |
|
import json |
|
import time |
|
from io import BytesIO |
|
from pathlib import Path |
|
from subprocess import Popen |
|
from urllib.parse import urlencode |
|
from urllib.request import Request, urlopen |
|
|
|
import soundfile |
|
|
|
base_url = "http://127.0.0.1:50021/" |
|
|
|
|
|
def test_release_build(dist_dir: Path, skip_run_process: bool) -> None: |
|
run_file = dist_dir / "run" |
|
if not run_file.exists(): |
|
run_file = dist_dir / "run.exe" |
|
|
|
|
|
process = None |
|
if not skip_run_process: |
|
process = Popen([run_file.absolute()], cwd=dist_dir) |
|
time.sleep(60) |
|
|
|
|
|
req = Request(base_url + "version") |
|
with urlopen(req) as res: |
|
assert len(res.read()) > 0 |
|
|
|
|
|
text = "こんにちは、音声合成の世界へようこそ" |
|
req = Request( |
|
base_url + "audio_query?" + urlencode({"speaker": "1", "text": text}), |
|
method="POST", |
|
) |
|
with urlopen(req) as res: |
|
query = json.loads(res.read().decode("utf-8")) |
|
|
|
|
|
req = Request(base_url + "synthesis?speaker=1", method="POST") |
|
req.add_header("Content-Type", "application/json") |
|
req.data = json.dumps(query).encode("utf-8") |
|
with urlopen(req) as res: |
|
wave = res.read() |
|
soundfile.read(BytesIO(wave)) |
|
|
|
|
|
req = Request(base_url + "engine_manifest", method="GET") |
|
with urlopen(req) as res: |
|
manifest = json.loads(res.read().decode("utf-8")) |
|
assert "uuid" in manifest |
|
|
|
if not skip_run_process: |
|
|
|
assert process.poll() is None |
|
|
|
|
|
process.terminate() |
|
|
|
|
|
if __name__ == "__main__": |
|
parser = argparse.ArgumentParser() |
|
parser.add_argument("--dist_dir", type=Path, default=Path("dist/")) |
|
parser.add_argument("--skip_run_process", action="store_true") |
|
args = parser.parse_args() |
|
test_release_build(dist_dir=args.dist_dir, skip_run_process=args.skip_run_process) |
|
|