Add sanity checks when a test file is not added to CI (#6947)
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import argparse
|
import argparse
|
||||||
import glob
|
import glob
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
from sglang.test.test_utils import run_unittest_files
|
from sglang.test.test_utils import run_unittest_files
|
||||||
|
|
||||||
@@ -189,9 +190,86 @@ suites = {
|
|||||||
TestFile("test_gptqmodel_dynamic.py", 72),
|
TestFile("test_gptqmodel_dynamic.py", 72),
|
||||||
TestFile("test_vllm_dependency.py"),
|
TestFile("test_vllm_dependency.py"),
|
||||||
],
|
],
|
||||||
|
"__not_in_ci__": [
|
||||||
|
TestFile("cpu/test_rope.py"),
|
||||||
|
TestFile("cpu/test_topk.py"),
|
||||||
|
TestFile("cpu/utils.py"),
|
||||||
|
TestFile("experiment_runner.py"),
|
||||||
|
TestFile("models/compare.py"),
|
||||||
|
TestFile("models/lora/utils.py"),
|
||||||
|
TestFile("models/test_clip_models.py"),
|
||||||
|
TestFile("models/test_dummy_grok_models.py"),
|
||||||
|
TestFile("models/test_encoder_embedding_models.py"),
|
||||||
|
TestFile("models/test_gme_qwen_models.py"),
|
||||||
|
TestFile("models/test_grok_models.py"),
|
||||||
|
TestFile("models/test_llama4_models.py"),
|
||||||
|
TestFile("models/test_mtp_models.py"),
|
||||||
|
TestFile("models/test_unsloth_models.py"),
|
||||||
|
TestFile("parse_results.py"),
|
||||||
|
TestFile("run_suite.py"),
|
||||||
|
TestFile("test_bench_one_batch.py"),
|
||||||
|
TestFile("test_bench_serving.py"),
|
||||||
|
TestFile("test_cache_report.py"),
|
||||||
|
TestFile("test_custom_allreduce.py"),
|
||||||
|
TestFile("test_deepep_internode.py"),
|
||||||
|
TestFile("test_deepep_intranode.py"),
|
||||||
|
TestFile("test_deepep_low_latency.py"),
|
||||||
|
TestFile("test_double_sparsity.py"),
|
||||||
|
TestFile("test_eplb.py"),
|
||||||
|
TestFile("test_expert_distribution.py"),
|
||||||
|
TestFile("test_expert_location_updater.py"),
|
||||||
|
TestFile("test_eval_accuracy_large.py"),
|
||||||
|
TestFile("test_fim_completion.py"),
|
||||||
|
TestFile("test_fp8_kvcache.py"),
|
||||||
|
TestFile("test_function_calling.py"),
|
||||||
|
TestFile("test_get_weights_by_name.py"),
|
||||||
|
TestFile("test_health_check.py"),
|
||||||
|
TestFile("test_hicache_page.py"),
|
||||||
|
TestFile("test_io_struct.py"),
|
||||||
|
TestFile("test_json_mode.py"),
|
||||||
|
TestFile("test_kv_events.py"),
|
||||||
|
TestFile("test_matched_stop.py"),
|
||||||
|
TestFile("test_modelopt.py"),
|
||||||
|
TestFile("test_modelopt_fp8kvcache.py"),
|
||||||
|
TestFile("test_models_from_modelscope.py"),
|
||||||
|
TestFile("test_moe_deepep.py"),
|
||||||
|
TestFile("test_moe_deepep_eval_accuracy_large.py"),
|
||||||
|
TestFile("test_moe_eval_accuracy_large.py"),
|
||||||
|
TestFile("test_mscclpp.py"),
|
||||||
|
TestFile("test_sagemaker_server.py"),
|
||||||
|
TestFile("test_schedule_policy.py"),
|
||||||
|
TestFile("test_score_api.py"),
|
||||||
|
TestFile("test_session_control.py"),
|
||||||
|
TestFile("test_srt_engine_with_quant_args.py"),
|
||||||
|
TestFile("test_torch_tp.py"),
|
||||||
|
TestFile("test_triton_attention_rocm_mla.py"),
|
||||||
|
TestFile("test_triton_moe_wna16.py"),
|
||||||
|
TestFile("test_two_batch_overlap.py"),
|
||||||
|
TestFile("test_verl_engine.py"),
|
||||||
|
TestFile("test_verl_engine_server.py"),
|
||||||
|
TestFile("test_vision_openai_server.py"),
|
||||||
|
TestFile("test_vision_openai_server_common.py"),
|
||||||
|
TestFile("test_vlm_accuracy.py"),
|
||||||
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def _sanity_check_suites(suites):
|
||||||
|
dir_base = Path(__file__).parent
|
||||||
|
disk_files = set([str(x.relative_to(dir_base)) for x in dir_base.glob("**/*.py")])
|
||||||
|
|
||||||
|
suite_files = set(
|
||||||
|
[test_file.name for _, suite in suites.items() for test_file in suite]
|
||||||
|
)
|
||||||
|
|
||||||
|
missing_files = sorted(list(disk_files - suite_files))
|
||||||
|
assert len(missing_files) == 0, (
|
||||||
|
f"Some test files are not in test suite. "
|
||||||
|
f"If this is intentional, please add to `not_in_ci` section. "
|
||||||
|
f"{missing_files=}"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def auto_partition(files, rank, size):
|
def auto_partition(files, rank, size):
|
||||||
"""
|
"""
|
||||||
Partition files into size sublists with approximately equal sums of estimated times
|
Partition files into size sublists with approximately equal sums of estimated times
|
||||||
@@ -276,6 +354,8 @@ if __name__ == "__main__":
|
|||||||
args = arg_parser.parse_args()
|
args = arg_parser.parse_args()
|
||||||
print(f"{args=}")
|
print(f"{args=}")
|
||||||
|
|
||||||
|
_sanity_check_suites(suites)
|
||||||
|
|
||||||
if args.suite == "all":
|
if args.suite == "all":
|
||||||
files = glob.glob("**/test_*.py", recursive=True)
|
files = glob.glob("**/test_*.py", recursive=True)
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user