Files
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

171 lines
7.7 KiB
Markdown

# TheRock Extended Tests Framework
Unified testing framework for TheRock ROCm distribution, supporting benchmark and functional testing with automated execution, system detection, and results management.
## Table of Contents
- [Overview](#overview)
- [Quick Start](#quick-start)
- [Project Structure](#project-structure)
- [CI/CD Integration](#cicd-integration)
- [Architecture](#architecture)
## Overview
The test framework provides infrastructure for two test types:
| Test Type | Purpose | Result Types | When to Use |
| ----------------------------- | -------------------------------- | -------------------- | -------------------------------------------- |
| **[Benchmark](benchmark/)** | Performance regression detection | PASS/FAIL/UNKNOWN | Prevent performance degradation (nightly CI) |
| **[Functional](functional/)** | Correctness validation | PASS/FAIL/ERROR/SKIP | Verify expected behavior (nightly CI) |
### Key Features
- **Shared Infrastructure** - Common utilities, configuration, and results management
- **System Auto-Detection** - Hardware, OS, GPU, and ROCm version detection
- **Results Management** - Local storage (JSON) and API upload with retry logic
- **Comprehensive Logging** - File rotation and configurable log levels
- **Error Handling** - Custom exceptions with clear, actionable messages
- **Modular Architecture** - Extensible design for adding new test types
- **CI/CD Integration** - Parallel execution in nightly CI
## Quick Start
### Environment Setup
All tests require these environment variables. **Note:** These are automatically configured in CI runs. For local testing, adjust values based on your setup.
> **Setting Up Environment:** See [Test Environment Reproduction](../../docs/development/test_environment_reproduction.md) for instructions on reproducing the CI test environment, including how to obtain TheRock build artifacts from a CI run and get the `ARTIFACT_RUN_ID` (same as `CI_RUN_ID` in the document).
```bash
# Required: Path to TheRock bin/ directory (see above for how to obtain)
export THEROCK_BIN_DIR=/path/to/therock/build/bin
# Required: GitHub Actions run ID (from CI run URL, e.g., https://github.com/ROCm/TheRock/actions/runs/16948046392)
export ARTIFACT_RUN_ID=16948046392
# Required: Update to match your GPU family (e.g., gfx908, gfx90a, gfx942, gfx950-dcgpu)
export AMDGPU_FAMILIES=gfx950-dcgpu
# Optional: Control GPU visibility on multi-GPU nodes (e.g., ROCR_VISIBLE_DEVICES=0)
# export ROCR_VISIBLE_DEVICES=0
```
### Running Tests
See test-specific READMEs for detailed instructions and examples:
- **[Benchmark Tests](benchmark/README.md)** - Performance regression testing
- **[Functional Tests](functional/README.md)** - Correctness validation testing
## Project Structure
```
extended_tests/
├── __init__.py
├── README.md # This file
│
├── configs/ # SHARED configuration
│ └── config.yml # Framework config (logging, API, execution)
│
├── benchmark/ # Benchmark tests (LKG comparison)
│ ├── scripts/ # Test implementations
│ │ ├── benchmark_base.py # Base class with LKG logic
│ │ └── test_*_benchmark.py # Individual benchmark tests
│ ├── configs/ # Test-specific configurations
│ │ ├── hipblaslt.json
│ │ └── rocfft.json
│ ├── benchmark_test_matrix.py # Benchmark test matrix
│ └── README.md # Benchmark-specific docs
│
├── functional/ # Functional/correctness tests
│ ├── scripts/ # Test implementations
│ │ ├── functional_base.py # Base class for functional tests
│ │ └── test_*.py # Individual tests
│ ├── configs/ # Test-specific configurations
│ │ └── *.json
│ ├── functional_test_matrix.py # Functional test matrix
│ └── README.md # Functional-specific docs
│
└── utils/ # SHARED utilities for all test types
├── extended_test_base.py # ExtendedTestBase - shared base class for all tests
├── extended_test_client.py # ExtendedTestClient - system detection & result reporting
├── exceptions.py # Custom exception classes
│ ├── BenchmarkExecutionError # Execution/parsing failures
│ ├── BenchmarkResultError # Result validation failures
│ └── FrameworkException # Base exception
│
├── logger.py # Logging utilities
├── constants.py # Global constants
│
├── config/ # Configuration parsers
│ ├── config_parser.py
│ ├── config_validator.py
│ └── config_helper.py
│
├── results/ # Results handling & LKG
│ ├── results_api.py # API for storing/retrieving results
│ └── results_handler.py # Process and format results
│
└── system/ # Hardware & ROCm detection
├── hardware.py # GPU detection and capabilities
├── platform.py # Platform-specific utilities
└── rocm_detector.py # ROCm version detection
```
## CI/CD Integration
### Test Execution Schedule
| Workflow Trigger | Benchmark Tests | Functional Tests |
| -------------------------- | --------------- | ---------------- |
| **Pull Request (PR)** | Skipped | Skipped |
| **Nightly CI (scheduled)** | Run (parallel) | Run (parallel) |
| **Push to main** | Skipped | Skipped |
### Parallel Execution Architecture
Tests run in **parallel** for faster CI execution:
```
ci_nightly.yml
└─ ci_linux.yml / ci_windows.yml
├─ build_artifacts
│
└─ test_artifacts
└─ Component + Functional + Benchmark tests
(runner auto-selected per component)
```
**Workflow Files:**
- `.github/workflows/ci_nightly.yml` - Nightly CI orchestration
- `.github/workflows/ci_linux.yml` / `ci_windows.yml` - Platform-specific CI logic
- `.github/workflows/test_artifacts.yml` - All test execution (component, functional, benchmark)
**Key Differences:**
- **Component Tests**: Run on all PRs (smoke) and nightly (full), use regular runners (`test_runs_on`)
- **Benchmark Tests**: Run only when globally enabled via `run_extended_tests == true` AND a dedicated performance runner is available (`benchmark-runs-on` in `amdgpu_family_matrix.py`). Runner is auto-selected per component.
- **Functional Tests**: Run only when globally enabled via `run_extended_tests == true`, use regular runners (`test_runs_on`)
## Architecture
### Common Test Execution Flow
All tests follow this pattern:
1. **Initialize** - Auto-detect system (GPU, ROCm), load configuration, setup logging
1. **Execute** - Run test binaries/scripts, capture output to log files
1. **Parse** - Extract metrics/results from logs, structure data
1. **Process** - Type-specific validation (LKG comparison or correctness check)
1. **Report** - Display results, upload to API, update GitHub Actions summary
### Implementation Details
See test-specific READMEs for detailed implementation guides:
- **[Benchmark Tests](benchmark/README.md)** - LKG comparison logic and adding new benchmarks
- **[Functional Tests](functional/README.md)** - Correctness validation and adding new tests
- **[Shared Utils](utils/README.md)** - Common utilities, exceptions, and helpers