106 lines
2.5 KiB
Python
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)
|