Files
2026-07-13 13:35:51 +08:00

106 lines
2.5 KiB
Python

import subprocess
from pathlib import Path
from typing import NamedTuple
import pytest
# class DatasetSpec:
dataset_spec = {"cora": {"timeout": 30}}
class ExperimentSpec(NamedTuple):
pipeline: str
dataset: str
model: str
timeout: int
extra_cfg: dict = {}
exps = [
ExperimentSpec(
pipeline="nodepred", dataset="cora", model="sage", timeout=0.5
)
]
@pytest.mark.parametrize("spec", exps)
def test_train(spec):
cfg_path = "/tmp/test.yaml"
run = subprocess.run(
[
"dgl",
"config",
spec.pipeline,
"--data",
spec.dataset,
"--model",
spec.model,
"--cfg",
cfg_path,
],
timeout=spec.timeout,
capture_output=True,
)
assert (
run.stderr is None or len(run.stderr) == 0
), "Found error message: {}".format(run.stderr)
output = run.stdout.decode("utf-8")
print(output)
run = subprocess.run(
["dgl", "train", "--cfg", cfg_path],
timeout=spec.timeout,
capture_output=True,
)
assert (
run.stderr is None or len(run.stderr) == 0
), "Found error message: {}".format(run.stderr)
output = run.stdout.decode("utf-8")
print(output)
TEST_RECIPE_FOLDER = "my_recipes"
@pytest.fixture
def setup_recipe_folder():
run = subprocess.run(
["dgl", "recipe", "copy", "--dir", TEST_RECIPE_FOLDER],
timeout=15,
capture_output=True,
)
@pytest.mark.parametrize(
"file", [str(f) for f in Path(TEST_RECIPE_FOLDER).glob("*.yaml")]
)
def test_recipe(file, setup_recipe_folder):
print("DGL enter train {}".format(file))
try:
run = subprocess.run(
["dgl", "train", "--cfg", file], timeout=5, capture_output=True
)
sh_stdout, sh_stderr = run.stdout, run.stderr
except subprocess.TimeoutExpired as e:
sh_stdout = e.stdout
sh_stderr = e.stderr
if sh_stderr is not None and len(sh_stderr) != 0:
error_str = sh_stderr.decode("utf-8")
lines = error_str.split("\n")
for line in lines:
line = line.strip()
if (
line.startswith("WARNING")
or line.startswith("Aborted")
or line.startswith("0%")
):
continue
else:
assert len(line) == 0, error_str
print("{} stdout: {}".format(file, sh_stdout))
print("{} stderr: {}".format(file, sh_stderr))
# test_recipe( , None)