[CI] Add READMEs for unit test directory structure (#20626)
This commit is contained in:
23
test/registered/README.md
Normal file
23
test/registered/README.md
Normal file
@@ -0,0 +1,23 @@
|
||||
# Registered Tests
|
||||
|
||||
Tests under this directory are auto-discovered by `run_suite.py` via CI registration decorators.
|
||||
|
||||
## Where Should I Put My New Test?
|
||||
|
||||
### No server / engine launch required
|
||||
|
||||
| What you're testing | Directory | Requires |
|
||||
|---|---|---|
|
||||
| Component logic in isolation (cache, scheduler, config, parser, etc.) | [`unit/<module>/`](unit/README.md) | CPU or GPU |
|
||||
| CUDA kernel correctness | `kernels/` | GPU |
|
||||
|
||||
### Server / engine launch required (E2E)
|
||||
|
||||
| What you're testing | Directory | Requires |
|
||||
|---|---|---|
|
||||
| Model inference correctness | `models/`, `4-gpu-models/`, `8-gpu-models/` | GPU |
|
||||
| Feature-specific (OpenAI API, LoRA, speculative, distributed, VLM, etc.) | `openai_server/`, `lora/`, `spec/`, `distributed/`, ... | GPU |
|
||||
| Benchmarks (performance, accuracy, stress) | `benchmark/` | GPU |
|
||||
| Platform-specific | `amd/`, `ascend/` | Vendor GPU |
|
||||
|
||||
See [`unit/README.md`](unit/README.md) for unit test conventions.
|
||||
55
test/registered/unit/README.md
Normal file
55
test/registered/unit/README.md
Normal file
@@ -0,0 +1,55 @@
|
||||
# Unit Tests
|
||||
|
||||
Component-level tests that do **not** launch a server or load model weights.
|
||||
Tests can use CPU or GPU — the key criterion is **no server process**.
|
||||
|
||||
## Quick Start
|
||||
|
||||
1. Find the source file under `python/sglang/srt/`.
|
||||
2. Create the corresponding test here, mirroring the source tree:
|
||||
```
|
||||
srt/mem_cache/radix_cache.py → unit/mem_cache/test_radix_cache.py
|
||||
srt/sampling/sampling_params.py → unit/sampling/test_sampling_params.py
|
||||
```
|
||||
3. Register for CI at the **top of the file** (after imports, before test classes):
|
||||
```python
|
||||
from sglang.test.ci.ci_register import register_cpu_ci
|
||||
register_cpu_ci(est_time=5, suite="stage-a-cpu-only")
|
||||
# or: register_cuda_ci(est_time=10, suite="stage-b-test-small-1-gpu")
|
||||
```
|
||||
4. Run locally:
|
||||
```bash
|
||||
pytest test/registered/unit/ -v # all unit tests
|
||||
pytest test/registered/unit/mem_cache/ -v # one module
|
||||
```
|
||||
|
||||
## Example
|
||||
|
||||
```python
|
||||
"""Unit tests for <module> — no server, no model loading."""
|
||||
|
||||
from sglang.test.ci.ci_register import register_cpu_ci
|
||||
|
||||
register_cpu_ci(est_time=5, suite="stage-a-cpu-only")
|
||||
|
||||
import unittest
|
||||
|
||||
from sglang.srt.<module> import TargetClass
|
||||
|
||||
|
||||
class TestTargetClass(unittest.TestCase):
|
||||
def test_basic_behavior(self):
|
||||
obj = TargetClass(...)
|
||||
self.assertEqual(obj.method(), expected)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
```
|
||||
|
||||
## Rules
|
||||
|
||||
- **No** `popen_launch_server()` or `Engine(...)`.
|
||||
- **No** model weight loading.
|
||||
- Use `unittest.TestCase` or `CustomTestCase` (from `sglang.test.test_utils`, adds CI retry).
|
||||
- Use `unittest.mock` for dependencies that are expensive to construct.
|
||||
Reference in New Issue
Block a user