refactor(constants): migrate tests/infrastructure imports to submodules#5335
refactor(constants): migrate tests/infrastructure imports to submodules#5335vsibirsk wants to merge 1 commit into
Conversation
|
Warning Review limit reached
More reviews will be available in 7 minutes. Learn how PR review limits work. Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file). ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits. 🚦 How do rate limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (32)
📝 WalkthroughWalkthroughAll import statements across 32 files in ChangesImport migration to utilities.constants submodules
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related PRs
Suggested reviewers
Caution Pre-merge checks failedPlease resolve all errors before merging. Addressing warnings is optional.
❌ Failed checks (1 error)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Warning Review ran into problems🔥 ProblemsLinked repositories: Your configuration references 1 linked repositories, but your current plan allows 0. Analyzed ``, skipped Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Report bugs in Issues Welcome! 🎉This pull request will be automatically processed with the following features: 🔄 Automatic Actions
📋 Available CommandsPR Status Management
Review & Approval
Testing & Validation
Container Operations
Cherry-pick Operations
Branch Management
Label Management
✅ Merge RequirementsThis PR will be automatically approved when the following conditions are met:
📊 Review ProcessApprovers and ReviewersApprovers:
Reviewers:
Available Labels
AI Features
Security Checks
💡 Tips
For more information, please refer to the project documentation or contact the maintainers. |
Replace from utilities.constants import with direct submodule imports across 32 infrastructure test files. Images kept on compat import where required. Generated-by: Claude Sonnet 4.6 Signed-off-by: vsibirsk <vsibirsk@redhat.com>
|
/test-plan |
Test execution plan request detailsCRITICAL: You MUST post an inline review comment on the first changed line of the first file. As an expert software testing engineer, analyze all modified files in this PR and create a targeted test execution plan. Analysis Requirements:
Output rules: Your deliverable: Test Execution Plan
Use these formats:
Real test commands (MANDATORY when changes affect session/runtime code): When the affected code runs at session/collection time (conftest fixtures, pytest plugins,
Example output for a session-startup fix: Guidelines:
Hardware-Related Checks (SR-IOV, GPU, DPDK): When PR modifies fixtures for hardware-specific resources:
CRITICAL WORKFLOW COMPLETION RULES: When responding to this test execution plan request, you MUST follow these rules EXACTLY:
ABSOLUTE PROHIBITIONS (violating these creates empty/meaningless reviews):
Remember: The pull request review is visible to users. Additional comments are redundant noise. CRITICAL — Verification rules for smoke and gating decisions: |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
# Check for smoke markers in the affected test directory
echo "=== Smoke marked files in tests/infrastructure/ ==="
rg -l '`@pytest.mark.smoke`' tests/infrastructure/ 2>/dev/null || echo "None found"
echo ""
echo "=== Gating marked files in tests/infrastructure/ ==="
rg -l '`@pytest.mark.gating`' tests/infrastructure/ 2>/dev/null || echo "None found"
echo ""
echo "=== Check if any modified conftest files have autouse fixtures ==="
for f in tests/infrastructure/conftest.py \
tests/infrastructure/golden_images/conftest.py \
tests/infrastructure/golden_images/update_boot_source/conftest.py \
tests/infrastructure/instance_types/conftest.py \
tests/infrastructure/instance_types/supported_os/conftest.py \
tests/infrastructure/numa/conftest.py \
tests/infrastructure/tekton/conftest.py \
tests/infrastructure/vm_console_proxy/conftest.py; do
if [ -f "$f" ]; then
echo "--- $f autouse fixtures ---"
rg 'autouse' "$f" || echo " No autouse"
fi
done
echo ""
echo "=== Verify all new submodule imports exist ==="
python3 -c "
import importlib, sys
modules = [
'utilities.constants.hco',
'utilities.constants.images',
'utilities.constants.timeouts',
'utilities.constants.storage',
'utilities.constants.instance_types',
'utilities.constants.os_matrix',
'utilities.constants.components',
'utilities.constants.virt',
'utilities.constants.tekton',
'utilities.constants.cluster',
'utilities.constants.architecture',
'utilities.constants.pytest',
'utilities.constants.networking',
'utilities.virt',
]
sys.path.insert(0, '.')
for m in modules:
try:
importlib.import_module(m)
print(f'OK: {m}')
except ImportError as e:
print(f'MISSING: {m} -> {e}')
" 2>/dev/null || echo "Python import check skipped (no interpreter or path issues)"
echo ""
echo "=== List all files under utilities/constants/ to verify submodule structure ==="
fd . utilities/constants/ --type f -e py 2>/dev/null | sort || ls utilities/constants/ 2>/dev/null || echo "Path not found"Length of output: 5236 🏁 Script executed: #!/bin/bash
# Get PR files to find the first changed file and its first changed line
gh api repos/RedHatQE/openshift-virtualization-tests/pulls/5335/files \
--jq '.[0] | {filename: .filename, patch: .patch}' 2>/dev/null | head -50
echo ""
echo "=== Get commit SHA for inline comment ==="
gh api repos/RedHatQE/openshift-virtualization-tests/pulls/5335 \
--jq '.head.sha' 2>/dev/nullLength of output: 1081 🏁 Script executed: #!/bin/bash
# Post a non-blocking inline review comment on the first changed line of tests/infrastructure/conftest.py
BODY='## Test Execution Plan
**Run smoke tests: True**
Dependency path: `tests/infrastructure/instance_types/supported_os/test_rhel_os.py` (`@pytest.mark.smoke`) is **directly modified** (import refactored from `utilities.constants` → `utilities.constants.instance_types`) **AND** `tests/infrastructure/conftest.py` (session-scoped `autouse=True` fixture) is modified — an `ImportError` here aborts the entire session before any test runs.
**Run gating tests: True**
Dependency path: `test_common_vm_instancetype.py` and `test_common_vm_preference.py` (both `@pytest.mark.gating`) are **directly modified** (import refactored from `utilities.constants` → `utilities.constants.components`). `test_rhel_os.py` (also gating + smoke) is directly modified. `test_update_vm_with_instancetype_preference.py` (gating) is affected via the modified parent `tests/infrastructure/instance_types/conftest.py`.
---
**Affected tests to run**
| File | Marker |
|---|---|
| `tests/infrastructure/instance_types/supported_os/test_rhel_os.py` | smoke + gating |
| `tests/infrastructure/instance_types/test_common_vm_instancetype.py` | gating |
| `tests/infrastructure/instance_types/test_common_vm_preference.py` | gating |
| `tests/infrastructure/instance_types/test_update_vm_with_instancetype_preference.py` | gating (via conftest) |
All remaining files under `tests/infrastructure/` are affected at collection time via the session-scoped `autouse` fixture in `tests/infrastructure/conftest.py`.
---
**Real tests (cluster required)**
The `tests/infrastructure/conftest.py` session-scoped `autouse` fixture runs at collection time. A wrong import path causes an `ImportError` that aborts collection for the full session.
Error path (verify imports resolve correctly):Length of output: 2275 🏁 Script executed: #!/bin/bash
cat > /tmp/plan.md << 'ENDOFPLAN'
## Test Execution Plan
**Run smoke tests: True**
Dependency path: `tests/infrastructure/instance_types/supported_os/test_rhel_os.py` (`@pytest.mark.smoke`) is **directly modified** (import refactored from `utilities.constants` → `utilities.constants.instance_types`) **AND** `tests/infrastructure/conftest.py` (session-scoped `autouse=True` fixture) is modified — an `ImportError` here aborts the entire session before any test runs.
**Run gating tests: True**
Dependency path: `test_common_vm_instancetype.py` and `test_common_vm_preference.py` (both `@pytest.mark.gating`) are **directly modified** (import refactored from `utilities.constants` → `utilities.constants.components`). `test_rhel_os.py` (also gating + smoke) is directly modified. `test_update_vm_with_instancetype_preference.py` (gating) is affected via the modified parent `tests/infrastructure/instance_types/conftest.py`.
---
**Affected tests to run**
| File | Marker |
|---|---|
| `tests/infrastructure/instance_types/supported_os/test_rhel_os.py` | smoke + gating |
| `tests/infrastructure/instance_types/test_common_vm_instancetype.py` | gating |
| `tests/infrastructure/instance_types/test_common_vm_preference.py` | gating |
| `tests/infrastructure/instance_types/test_update_vm_with_instancetype_preference.py` | gating (via conftest) |
All remaining files under `tests/infrastructure/` are affected at collection time via the session-scoped `autouse` fixture in `tests/infrastructure/conftest.py`.
---
**Real tests (cluster required)**
`tests/infrastructure/conftest.py` has a session-scoped `autouse` fixture that runs at collection time. A wrong import path causes an `ImportError` that aborts collection for the full session.
Error path (verify imports resolve correctly):Length of output: 2040 🏁 Script executed: #!/bin/bash
python3 << 'PYEOF'
import subprocess, json, sys
body = """## Test Execution Plan
**Run smoke tests: True**
Dependency path: `tests/infrastructure/instance_types/supported_os/test_rhel_os.py` (`@pytest.mark.smoke`) is **directly modified** (import refactored from `utilities.constants` \u2192 `utilities.constants.instance_types`) **AND** `tests/infrastructure/conftest.py` (session-scoped `autouse=True` fixture) is modified \u2014 an `ImportError` here aborts the entire session before any test runs.
**Run gating tests: True**
Dependency path: `test_common_vm_instancetype.py` and `test_common_vm_preference.py` (both `@pytest.mark.gating`) are **directly modified** (import refactored from `utilities.constants` \u2192 `utilities.constants.components`). `test_rhel_os.py` (also gating + smoke) is directly modified. `test_update_vm_with_instancetype_preference.py` (gating) is affected via the modified parent `tests/infrastructure/instance_types/conftest.py`.
---
**Affected tests to run**
| File | Marker |
|---|---|
| `tests/infrastructure/instance_types/supported_os/test_rhel_os.py` | smoke + gating |
| `tests/infrastructure/instance_types/test_common_vm_instancetype.py` | gating |
| `tests/infrastructure/instance_types/test_common_vm_preference.py` | gating |
| `tests/infrastructure/instance_types/test_update_vm_with_instancetype_preference.py` | gating (via conftest) |
All remaining files under `tests/infrastructure/` are affected at collection time via the session-scoped `autouse` fixture in `tests/infrastructure/conftest.py`.
---
**Real tests (cluster required)**
`tests/infrastructure/conftest.py` has a session-scoped `autouse` fixture that runs at collection time. A wrong import path causes an `ImportError` that aborts collection for the full session.
Error path (verify imports resolve correctly):
pytest tests/infrastructure/ --collect-only -q
Expected: all modules listed with no `ImportError` or `ModuleNotFoundError`
Happy path (smoke + gating regression):
pytest tests/infrastructure/instance_types/ -m "smoke or gating" -v
Expected: all previously-passing tests collect and pass"""
payload = {
"commit_id": "0d59bec95fd6e9f618120a80ea0192004064bfc7",
"body": "",
"event": "COMMENT",
"comments": [
{
"path": "tests/infrastructure/conftest.py",
"line": 15,
"side": "RIGHT",
"body": body
}
]
}
with open('/tmp/payload.json', 'w') as f:
json.dump(payload, f)
result = subprocess.run(
['gh', 'api',
'repos/RedHatQE/openshift-virtualization-tests/pulls/5335/reviews',
'--method', 'POST',
'--input', '/tmp/payload.json',
'--jq', '.id'],
capture_output=True, text=True
)
print("stdout:", result.stdout)
print("stderr:", result.stderr)
print("returncode:", result.returncode)
PYEOFLength of output: 3042 |
0d59bec to
83bf615
Compare
|
Clean rebase detected — no code changes compared to previous head ( |
|
/retest tox |
|
/verified collect only since it's only import path updates (no logic change) |
Test execution plan request detailsCRITICAL: You MUST post an inline review comment on the first changed line of the first file. As an expert software testing engineer, analyze all modified files in this PR and create a targeted test execution plan. Analysis Requirements:
Output rules: Your deliverable: Test Execution Plan
Use these formats:
Real test commands (MANDATORY when changes affect session/runtime code): When the affected code runs at session/collection time (conftest fixtures, pytest plugins,
Example output for a session-startup fix: Guidelines:
Hardware-Related Checks (SR-IOV, GPU, DPDK): When PR modifies fixtures for hardware-specific resources:
CRITICAL WORKFLOW COMPLETION RULES: When responding to this test execution plan request, you MUST follow these rules EXACTLY:
ABSOLUTE PROHIBITIONS (violating these creates empty/meaningless reviews):
Remember: The pull request review is visible to users. Additional comments are redundant noise. CRITICAL — Verification rules for smoke and gating decisions: |
| ) | ||
| from tests.utils import verify_cpumanager_workers, verify_hugepages_1gi, verify_rwx_default_storage | ||
| from utilities.constants import DATA_SOURCE_NAME | ||
| from utilities.constants.hco import DATA_SOURCE_NAME |
There was a problem hiding this comment.
Test Execution Plan
Run smoke tests: True
Dependency path: tests/infrastructure/instance_types/supported_os/test_rhel_os.py (@pytest.mark.smoke) → fixtures golden_image_rhel_vm_with_instance_type / xfail_if_rhel8 → changed imports in tests/infrastructure/instance_types/supported_os/conftest.py (DATA_SOURCE_NAME, RHEL8_PREFERENCE, OS_FLAVOR_WIN_CONTAINER_DISK).
Shared startup path: every tests/infrastructure/** test also goes through the session-scoped autouse fixture tests/infrastructure/conftest.py::infrastructure_special_infra_sanity, whose DATA_SOURCE_NAME import changed on Line 15.
Run gating tests: True
Dependency paths:
tests/infrastructure/instance_types/supported_os/test_rhel_os.py(gating) → fixturesgolden_image_rhel_vm_with_instance_type/xfail_if_rhel8→ changed imports intests/infrastructure/instance_types/supported_os/conftest.pytests/infrastructure/instance_types/test_common_vm_instancetype.py(gating) → fixturesbase_vm_cluster_instancetypes,rhel_vm_for_dedicated_cpu,windows_vm_for_dedicated_cpu→ changed imports intests/infrastructure/instance_types/conftest.pytests/infrastructure/instance_types/test_common_vm_preference.py(gating) → fixturebase_vm_cluster_preferences→ changed imports intests/infrastructure/instance_types/conftest.py
Affected tests to run
tests/infrastructure/instance_types/supported_os/test_rhel_os.py(smoke, gating)tests/infrastructure/instance_types/test_common_vm_instancetype.py(gating)tests/infrastructure/instance_types/test_common_vm_preference.py(gating)
Real tests (cluster required)
Error path (collection/startup validation for shared conftest.py imports):
uv run pytest -rA -s -o log_cli=true --tc-file=tests/global_config_amd64.py --tc-format=python --cluster-sanity-skip-check --storage-class-matrix=ocs-storagecluster-ceph-rbd-virtualization --skip-deprecated-api-test tests/infrastructure/ --collect-only
Expected: collection completes with no ImportError / ModuleNotFoundError from the refactored imports.
Happy path (targeted regression on changed smoke/gating coverage):
uv run pytest -rA -s -o log_cli=true --tc-file=tests/global_config_amd64.py --tc-format=python --cluster-sanity-skip-check --storage-class-matrix=ocs-storagecluster-ceph-rbd-virtualization --skip-deprecated-api-test tests/infrastructure/instance_types/supported_os/test_rhel_os.py tests/infrastructure/instance_types/test_common_vm_instancetype.py tests/infrastructure/instance_types/test_common_vm_preference.py -m "smoke or gating" -v
Expected: the changed smoke/gating files collect and execute normally with the new import paths.
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
repo="RedHatQE/openshift-virtualization-tests"
pr="5335"
echo "=== Changed files in PR order ==="
gh api "repos/$repo/pulls/$pr/files?per_page=100" --paginate \
--jq '.[] | .filename'
echo
echo "=== First changed file with patch excerpt ==="
gh api "repos/$repo/pulls/$pr/files?per_page=100" --paginate \
--jq '.[0] | .filename, .patch'
echo
echo "=== PR head SHA ==="
gh api "repos/$repo/pulls/$pr" --jq '.head.sha'
echo
echo "=== Smoke-marked changed files ==="
python3 - <<'PY'
import json, subprocess, pathlib, sys
files = subprocess.check_output(
["gh","api","repos/RedHatQE/openshift-virtualization-tests/pulls/5335/files?per_page=100","--paginate"],
text=True,
)
changed = [f["filename"] for f in json.loads(files)]
for path in changed:
p = pathlib.Path(path)
if p.exists() and p.suffix == ".py":
txt = p.read_text()
if "`@pytest.mark.smoke`" in txt:
print(path)
PY
echo
echo "=== Gating-marked changed files ==="
python3 - <<'PY'
import json, subprocess, pathlib, sys
files = subprocess.check_output(
["gh","api","repos/RedHatQE/openshift-virtualization-tests/pulls/5335/files?per_page=100","--paginate"],
text=True,
)
changed = [f["filename"] for f in json.loads(files)]
for path in changed:
p = pathlib.Path(path)
if p.exists() and p.suffix == ".py":
txt = p.read_text()
if "`@pytest.mark.gating`" in txt:
print(path)
PY
echo
echo "=== Changed conftest files: outline ==="
fd -a 'conftest.py' tests/infrastructure | while read -r f; do
case "$f" in
*tests/infrastructure/conftest.py|*tests/infrastructure/golden_images/conftest.py|*tests/infrastructure/golden_images/update_boot_source/conftest.py|*tests/infrastructure/instance_types/conftest.py|*tests/infrastructure/instance_types/supported_os/conftest.py|*tests/infrastructure/numa/conftest.py|*tests/infrastructure/tekton/conftest.py|*tests/infrastructure/vm_console_proxy/conftest.py)
echo "--- $f"
ast-grep outline "$f" --view expanded || true
;;
esac
done
echo
echo "=== Autouse fixtures in changed conftest files ==="
rg -n -C2 'autouse\s*=\s*True|`@pytest`\.fixture' \
tests/infrastructure/conftest.py \
tests/infrastructure/golden_images/conftest.py \
tests/infrastructure/golden_images/update_boot_source/conftest.py \
tests/infrastructure/instance_types/conftest.py \
tests/infrastructure/instance_types/supported_os/conftest.py \
tests/infrastructure/numa/conftest.py \
tests/infrastructure/tekton/conftest.py \
tests/infrastructure/vm_console_proxy/conftest.py
echo
echo "=== Candidate fixture usages from changed conftest files in changed smoke/gating files ==="
python3 - <<'PY'
from pathlib import Path
import re, json, subprocess
changed = json.loads(subprocess.check_output(
["gh","api","repos/RedHatQE/openshift-virtualization-tests/pulls/5335/files?per_page=100","--paginate"], text=True
))
changed_files = [f["filename"] for f in changed]
conftests = [
"tests/infrastructure/conftest.py",
"tests/infrastructure/golden_images/conftest.py",
"tests/infrastructure/golden_images/update_boot_source/conftest.py",
"tests/infrastructure/instance_types/conftest.py",
"tests/infrastructure/instance_types/supported_os/conftest.py",
"tests/infrastructure/numa/conftest.py",
"tests/infrastructure/tekton/conftest.py",
"tests/infrastructure/vm_console_proxy/conftest.py",
]
fixture_names = {}
for cf in conftests:
txt = Path(cf).read_text()
names = re.findall(r'`@pytest`\.fixture(?:\([^)]*\))?\s*\ndef\s+([A-Za-z_][A-Za-z0-9_]*)', txt, flags=re.M)
fixture_names[cf] = names
for path in changed_files:
if not path.endswith(".py") or "conftest.py" in path:
continue
txt = Path(path).read_text()
if "`@pytest.mark.smoke`" not in txt and "`@pytest.mark.gating`" not in txt:
continue
print(f"--- {path}")
for cf, names in fixture_names.items():
relevant = [n for n in names if re.search(rf'\b{re.escape(n)}\b', txt)]
if relevant:
print(f" uses fixtures from {cf}: {', '.join(sorted(relevant))}")
PY
echo
echo "=== Exact markers in changed smoke/gating files ==="
rg -n -C2 '`@pytest`\.mark\.(smoke|gating)' \
tests/infrastructure/instance_types/supported_os/test_rhel_os.py \
tests/infrastructure/instance_types/test_common_vm_instancetype.py \
tests/infrastructure/instance_types/test_common_vm_preference.py \
tests/infrastructure/vm_console_proxy/test_vm_console_proxy.py \
tests/infrastructure/vhostmd/test_vhostmd.py \
tests/infrastructure/tekton/test_tekton_custom_ns.py || true
echo
echo "=== Import lines changed in shared conftest files ==="
git diff --unified=0 "origin/$(git rev-parse --abbrev-ref HEAD | sed 's#^.*$#main#')"...HEAD -- \
tests/infrastructure/conftest.py \
tests/infrastructure/golden_images/conftest.py \
tests/infrastructure/golden_images/update_boot_source/conftest.py \
tests/infrastructure/instance_types/conftest.py \
tests/infrastructure/instance_types/supported_os/conftest.py \
tests/infrastructure/numa/conftest.py \
tests/infrastructure/tekton/conftest.py \
tests/infrastructure/vm_console_proxy/conftest.py || trueLength of output: 53133 🏁 Script executed: #!/bin/bash
set -euo pipefail
repo="RedHatQE/openshift-virtualization-tests"
pr="5335"
commit_id="83bf6157af24d2536905b7593c8fcc2198e0eb8b"
path="tests/infrastructure/conftest.py"
line="15"
body_file="$(mktemp)"
payload_file="$(mktemp)"
cat > "$body_file" <<'EOF'
## Test Execution Plan
**Run smoke tests: True**
Dependency path: `tests/infrastructure/instance_types/supported_os/test_rhel_os.py` (`@pytest.mark.smoke`) → fixtures `golden_image_rhel_vm_with_instance_type` / `xfail_if_rhel8` → changed imports in `tests/infrastructure/instance_types/supported_os/conftest.py` (`DATA_SOURCE_NAME`, `RHEL8_PREFERENCE`, `OS_FLAVOR_WIN_CONTAINER_DISK`).
Shared startup path: every `tests/infrastructure/**` test also goes through the session-scoped autouse fixture `tests/infrastructure/conftest.py::infrastructure_special_infra_sanity`, whose `DATA_SOURCE_NAME` import changed on Line 15.
**Run gating tests: True**
Dependency paths:
- `tests/infrastructure/instance_types/supported_os/test_rhel_os.py` (`gating`) → fixtures `golden_image_rhel_vm_with_instance_type` / `xfail_if_rhel8` → changed imports in `tests/infrastructure/instance_types/supported_os/conftest.py`
- `tests/infrastructure/instance_types/test_common_vm_instancetype.py` (`gating`) → fixtures `base_vm_cluster_instancetypes`, `rhel_vm_for_dedicated_cpu`, `windows_vm_for_dedicated_cpu` → changed imports in `tests/infrastructure/instance_types/conftest.py`
- `tests/infrastructure/instance_types/test_common_vm_preference.py` (`gating`) → fixture `base_vm_cluster_preferences` → changed imports in `tests/infrastructure/instance_types/conftest.py`
**Affected tests to run**
- `tests/infrastructure/instance_types/supported_os/test_rhel_os.py` (smoke, gating)
- `tests/infrastructure/instance_types/test_common_vm_instancetype.py` (gating)
- `tests/infrastructure/instance_types/test_common_vm_preference.py` (gating)
**Real tests (cluster required)**
Error path (collection/startup validation for shared `conftest.py` imports):
`uv run pytest -rA -s -o log_cli=true --tc-file=tests/global_config_amd64.py --tc-format=python --cluster-sanity-skip-check --storage-class-matrix=ocs-storagecluster-ceph-rbd-virtualization --skip-deprecated-api-test tests/infrastructure/ --collect-only`
Expected: collection completes with no `ImportError` / `ModuleNotFoundError` from the refactored imports.
Happy path (targeted regression on changed smoke/gating coverage):
`uv run pytest -rA -s -o log_cli=true --tc-file=tests/global_config_amd64.py --tc-format=python --cluster-sanity-skip-check --storage-class-matrix=ocs-storagecluster-ceph-rbd-virtualization --skip-deprecated-api-test tests/infrastructure/instance_types/supported_os/test_rhel_os.py tests/infrastructure/instance_types/test_common_vm_instancetype.py tests/infrastructure/instance_types/test_common_vm_preference.py -m "smoke or gating" -v`
Expected: the changed smoke/gating files collect and execute normally with the new import paths.
EOF
python3 <<PY
import json, pathlib
body = pathlib.Path("$body_file").read_text()
payload = {
"commit_id": "$commit_id",
"event": "COMMENT",
"body": "",
"comments": [
{
"path": "$path",
"line": int("$line"),
"side": "RIGHT",
"body": body,
}
],
}
pathlib.Path("$payload_file").write_text(json.dumps(payload))
PY
post_inline() {
gh api "repos/$repo/pulls/$pr/reviews" \
--method POST \
--input "$payload_file"
}
if post_inline >/dev/null 2>&1; then
exit 0
fi
sleep 2
if post_inline >/dev/null 2>&1; then
exit 0
fi
gh pr comment "https://github.com/$repo/pull/$pr" --body-file "$body_file" >/dev/nullLength of output: 3824 |
What this PR does / why we need it:
Replace from utilities.constants import with direct submodule imports across 32 infrastructure test files. Images kept on compat import where required.
Generated-by: Claude Sonnet 4.6
Which issue(s) this PR fixes:
Special notes for reviewer:
This is a next PR in a series.
https://redhat.atlassian.net/browse/CNV-80952 and a follow up of #5188
jira-ticket:
https://redhat.atlassian.net/browse/CNV-91055
Summary by CodeRabbit