Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
4e349e6
:seedling: Use Patch instead of Update for finalizer operations (#2328)
tmshort Dec 2, 2025
3aa6b80
Merge branch 'main' into synchronize
Dec 3, 2025
ff3a602
UPSTREAM: <carry>: Add OpenShift specific files
dtfranz Oct 26, 2023
1ae80a9
UPSTREAM: <carry>: Add new tests for single/own namespaces install modes
camilamacedo86 Oct 6, 2025
557c855
UPSTREAM: <carry>: Upgrade OCP image from 4.20 to 4.21
camilamacedo86 Oct 13, 2025
4f47e85
UPSTREAM: <carry>: [Default Catalog Tests] - Change logic to get ocp …
camilamacedo86 Oct 13, 2025
b6c47fe
UPSTREAM: <carry>: Update OCP catalogs to v4.21
tmshort Oct 13, 2025
77ec46b
UPSTREAM: <carry>: support singleown cases in disconnected
kuiwang02 Oct 16, 2025
2795af4
UPSTREAM: <carry>: fix cases 81696 and 74618 for product code changes
kuiwang02 Oct 17, 2025
e1e7467
UPSTREAM: <carry>: Define Default timeouts and apply their usage accr…
camilamacedo86 Oct 22, 2025
8a6a17f
UPSTREAM: <carry>: Update to new feature-gate options in helm
tmshort Oct 22, 2025
6c63a09
UPSTREAM: <carry>: Fix flake for single/own ns tests by ensuring uniq…
camilamacedo86 Oct 22, 2025
3c5986d
UPSTREAM: <carry>: [OTE]: Enhance single/own ns based on review comme…
camilamacedo86 Oct 24, 2025
4abcc5a
UPSTREAM: <carry>: Update OwnSingle template to use spec.config.inlin…
kuiwang02 Nov 3, 2025
cf247ca
UPSTREAM: <carry>: [OTE]: Add webhook cleanup validation on extension…
camilamacedo86 Nov 4, 2025
f1e6311
UPSTREAM: <carry>: Add [OTP] to migrated cases
kuiwang02 Nov 7, 2025
511e116
UPSTREAM: <carry>: [OTE]: Upgrade dependencies used
camilamacedo86 Nov 5, 2025
429524c
UPSTREAM: <carry>: fix(OTE): fix OpenShift Kubernetes replace version…
camilamacedo86 Nov 10, 2025
f1ac82a
UPSTREAM: <carry>: [Default Catalog Tests] Upgrade go 1.24.6 and depe…
camilamacedo86 Nov 11, 2025
c591a3f
UPSTREAM: <carry>: add disconnected environment support with custom p…
kuiwang02 Nov 12, 2025
3fdfa64
UPSTREAM: <carry>: migrate jiazha test cases to OTE
jianzhangbjz Nov 14, 2025
24361f7
UPSTREAM: <carry>: migrate clustercatalog case to ote
Xia-Zhao-rh Oct 17, 2025
058414c
UPSTREAM: <carry>: migrate olmv1 QE stress cases
kuiwang02 Nov 20, 2025
8c4b315
UPSTREAM: <carry>: Use busybox/httpd to simulate probes
tmshort Nov 25, 2025
07681af
UPSTREAM: <carry>: migrate olmv1 QE cases
Xia-Zhao-rh Nov 25, 2025
26a023c
UPSTREAM: <carry>: add agent for olmv1 qe cases
kuiwang02 Oct 21, 2025
e8795a4
UPSTREAM: <drop>: go mod vendor
Dec 3, 2025
3b6bcf9
UPSTREAM: <drop>: remove upstream GitHub configuration
Dec 3, 2025
ca1c967
UPSTREAM: <drop>: configure the commit-checker
Dec 3, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
UPSTREAM: <carry>: add disconnected environment support with custom p…
…row job for migrated qe cases
  • Loading branch information
kuiwang02 authored and ci-robot committed Dec 3, 2025
commit c591a3f01bfc4c450b5fd21f774d0a0f4e1b95ac
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
}
},
{
"name": "[sig-olmv1][Jira:OLM] clusterextension PolarionID:68936-[OTP][Skipped:Disconnected]cluster extension can not be installed with insufficient permission sa for operand",
"name": "[sig-olmv1][Jira:OLM] clusterextension PolarionID:68936-[OTP]cluster extension can not be installed with insufficient permission sa for operand",
"originalName": "[sig-olmv1][Jira:OLM] clusterextension PolarionID:68936-[Skipped:Disconnected]cluster extension can not be installed with insufficient permission sa for operand",
"labels": {
"Extended": {},
Expand All @@ -52,7 +52,7 @@
}
},
{
"name": "[sig-olmv1][Jira:OLM] clusterextension PolarionID:68937-[OTP][Skipped:Disconnected]cluster extension can not be installed with insufficient permission sa for operand rbac object",
"name": "[sig-olmv1][Jira:OLM] clusterextension PolarionID:68937-[OTP]cluster extension can not be installed with insufficient permission sa for operand rbac object",
"originalName": "[sig-olmv1][Jira:OLM] clusterextension PolarionID:68937-[Skipped:Disconnected]cluster extension can not be installed with insufficient permission sa for operand rbac object",
"labels": {
"Extended": {},
Expand All @@ -69,7 +69,7 @@
}
},
{
"name": "[sig-olmv1][Jira:OLM] clusterextension PolarionID:75492-[OTP][Level0][Skipped:Disconnected]cluster extension can not be installed with wrong sa or insufficient permission sa",
"name": "[sig-olmv1][Jira:OLM] clusterextension PolarionID:75492-[OTP][Level0]cluster extension can not be installed with wrong sa or insufficient permission sa",
"originalName": "[sig-olmv1][Jira:OLM] clusterextension PolarionID:75492-[Skipped:Disconnected]cluster extension can not be installed with wrong sa or insufficient permission sa",
"labels": {
"Extended": {},
Expand All @@ -86,7 +86,7 @@
}
},
{
"name": "[sig-olmv1][Jira:OLM] clusterextension PolarionID:75493-[OTP][Level0][Skipped:Disconnected]cluster extension can be installed with enough permission sa",
"name": "[sig-olmv1][Jira:OLM] clusterextension PolarionID:75493-[OTP][Level0]cluster extension can be installed with enough permission sa",
"originalName": "[sig-olmv1][Jira:OLM] clusterextension PolarionID:75493-[Skipped:Disconnected]cluster extension can be installed with enough permission sa",
"labels": {
"Extended": {},
Expand All @@ -103,7 +103,7 @@
}
},
{
"name": "[sig-olmv1][Jira:OLM] clusterextension PolarionID:81538-[OTP][Skipped:Disconnected]preflight check on permission on allns mode",
"name": "[sig-olmv1][Jira:OLM] clusterextension PolarionID:81538-[OTP]preflight check on permission on allns mode",
"originalName": "[sig-olmv1][Jira:OLM] clusterextension PolarionID:81538-[Skipped:Disconnected]preflight check on permission on allns mode",
"labels": {
"Extended": {},
Expand All @@ -120,7 +120,7 @@
}
},
{
"name": "[sig-olmv1][Jira:OLM] clusterextension PolarionID:81664-[OTP][Skipped:Disconnected]preflight check on permission on own ns mode",
"name": "[sig-olmv1][Jira:OLM] clusterextension PolarionID:81664-[OTP]preflight check on permission on own ns mode",
"originalName": "[sig-olmv1][Jira:OLM] clusterextension PolarionID:81664-[Skipped:Disconnected]preflight check on permission on own ns mode",
"labels": {
"Extended": {},
Expand All @@ -137,7 +137,7 @@
}
},
{
"name": "[sig-olmv1][Jira:OLM] clusterextension PolarionID:81696-[OTP][Skipped:Disconnected]preflight check on permission on single ns mode",
"name": "[sig-olmv1][Jira:OLM] clusterextension PolarionID:81696-[OTP]preflight check on permission on single ns mode",
"originalName": "[sig-olmv1][Jira:OLM] clusterextension PolarionID:81696-[Skipped:Disconnected]preflight check on permission on single ns mode",
"labels": {
"Extended": {},
Expand All @@ -154,7 +154,7 @@
}
},
{
"name": "[sig-olmv1][Jira:OLM] clusterextension PolarionID:74618-[OTP][Skipped:Disconnected]ClusterExtension supports simple registry vzero bundles only",
"name": "[sig-olmv1][Jira:OLM] clusterextension PolarionID:74618-[OTP]ClusterExtension supports simple registry vzero bundles only",
"originalName": "[sig-olmv1][Jira:OLM] clusterextension PolarionID:74618-[Skipped:Disconnected]ClusterExtension supports simple registry vzero bundles only",
"labels": {
"Extended": {},
Expand Down
39 changes: 38 additions & 1 deletion openshift/tests-extension/test/qe/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,39 @@ All migrated test case code needs the following changes to run in the new test f
- Do NOT add `[OCPFeatureGate:xxxx]` label
20. **Exclusive**: change to `Serial`

## Disconnected Environment Support for Migrated QE cases

**IMPORTANT**: With IDMS/ITMS mirror configuration in place, disconnected environments work exactly like connected environments.

**What this means:**
- Write test cases the same way you would for connected environments
- Create ClusterCatalogs directly - no environment detection needed
- IDMS/ITMS automatically redirects image pulls to mirror registry
- No special helper functions or conditional logic required

**Image Requirements for Migrated QE Cases:**
- All operator images (bundle, base, index) must be hosted under `quay.io/openshifttest` or `quay.io/olmqe`
- This ensures images are mirrored to disconnected environments via IDMS/ITMS configuration
- Images from other registries will not be available in disconnected clusters

**Environment Validation for Disconnected-Supporting Migrated Test Cases:**

If your test case supports disconnected environments, you MUST call `ValidateAccessEnvironment` at the beginning of the test:

```go
g.It("test case supporting disconnected", func() {
olmv1util.ValidateAccessEnvironment(oc)
// rest of test code
})
```

**What ValidateAccessEnvironment does:**
- **Proxy clusters**: Returns immediately (no validation needed, proxy provides external access)
- **Connected clusters**: Returns immediately after quick network check (no validation needed)
- **Disconnected clusters**: Validates that ImageTagMirrorSet `image-policy-aosqe` is configured
- If ITMS is configured: Test proceeds normally
- If ITMS is missing: Test is skipped with clear message explaining what's missing

## Test Automation Code Requirements

Consider these requirements when writing and reviewing code:
Expand Down Expand Up @@ -276,6 +309,10 @@ Consider these requirements when writing and reviewing code:

## Local Development Workflow

### Environment Configuration for Migrated QE cases

**IMPORTANT**: With IDMS/ITMS in place, tests work the same in both connected and disconnected environments. No special configuration is needed.

### Before Submitting PR

1. **Build and compile**:
Expand All @@ -288,7 +325,7 @@ Consider these requirements when writing and reviewing code:
```bash
# List all test names and search for your test using a keyword
./bin/olmv1-tests-ext list -o names | grep "keyword_from_your_test_name"

# Example: If your test is about "catalog installation", search for:
./bin/olmv1-tests-ext list -o names | grep "catalog"
# This will show the full test name like:
Expand Down
24 changes: 16 additions & 8 deletions openshift/tests-extension/test/qe/specs/olmv1_ce.go
Original file line number Diff line number Diff line change
Expand Up @@ -159,9 +159,10 @@ var _ = g.Describe("[sig-olmv1][Jira:OLM] clusterextension", g.Label("NonHyperSh

})

g.It("PolarionID:68936-[OTP][Skipped:Disconnected]cluster extension can not be installed with insufficient permission sa for operand", g.Label("original-name:[sig-olmv1][Jira:OLM] clusterextension PolarionID:68936-[Skipped:Disconnected]cluster extension can not be installed with insufficient permission sa for operand"), func() {
g.It("PolarionID:68936-[OTP]cluster extension can not be installed with insufficient permission sa for operand", g.Label("original-name:[sig-olmv1][Jira:OLM] clusterextension PolarionID:68936-[Skipped:Disconnected]cluster extension can not be installed with insufficient permission sa for operand"), func() {
e2e.Logf("Testing ClusterExtension installation failure when ServiceAccount lacks sufficient permissions for operand resources. Originally case 75492, using 68936 for faster execution.")
exutil.SkipForSNOCluster(oc)
olmv1util.ValidateAccessEnvironment(oc)
var (
ns = "ns-68936"
sa = "68936"
Expand Down Expand Up @@ -227,9 +228,10 @@ var _ = g.Describe("[sig-olmv1][Jira:OLM] clusterextension", g.Label("NonHyperSh

})

g.It("PolarionID:68937-[OTP][Skipped:Disconnected]cluster extension can not be installed with insufficient permission sa for operand rbac object", g.Label("original-name:[sig-olmv1][Jira:OLM] clusterextension PolarionID:68937-[Skipped:Disconnected]cluster extension can not be installed with insufficient permission sa for operand rbac object"), func() {
g.It("PolarionID:68937-[OTP]cluster extension can not be installed with insufficient permission sa for operand rbac object", g.Label("original-name:[sig-olmv1][Jira:OLM] clusterextension PolarionID:68937-[Skipped:Disconnected]cluster extension can not be installed with insufficient permission sa for operand rbac object"), func() {
e2e.Logf("Testing ClusterExtension installation failure when ServiceAccount lacks sufficient permissions for operand RBAC objects. Originally case 75492, using 68937 for faster execution.")
exutil.SkipForSNOCluster(oc)
olmv1util.ValidateAccessEnvironment(oc)
var (
ns = "ns-68937"
sa = "68937"
Expand Down Expand Up @@ -295,8 +297,9 @@ var _ = g.Describe("[sig-olmv1][Jira:OLM] clusterextension", g.Label("NonHyperSh

})

g.It("PolarionID:75492-[OTP][Level0][Skipped:Disconnected]cluster extension can not be installed with wrong sa or insufficient permission sa", g.Label("original-name:[sig-olmv1][Jira:OLM] clusterextension PolarionID:75492-[Skipped:Disconnected]cluster extension can not be installed with wrong sa or insufficient permission sa"), func() {
g.It("PolarionID:75492-[OTP][Level0]cluster extension can not be installed with wrong sa or insufficient permission sa", g.Label("original-name:[sig-olmv1][Jira:OLM] clusterextension PolarionID:75492-[Skipped:Disconnected]cluster extension can not be installed with wrong sa or insufficient permission sa"), func() {
exutil.SkipForSNOCluster(oc)
olmv1util.ValidateAccessEnvironment(oc)
var (
caseID = "75492"
ns = "ns-" + caseID
Expand Down Expand Up @@ -382,8 +385,9 @@ var _ = g.Describe("[sig-olmv1][Jira:OLM] clusterextension", g.Label("NonHyperSh
ce75492WrongSa.CheckClusterExtensionCondition(oc, "Installed", "message", "not found", 10, 60, 0)
})

g.It("PolarionID:75493-[OTP][Level0][Skipped:Disconnected]cluster extension can be installed with enough permission sa", g.Label("original-name:[sig-olmv1][Jira:OLM] clusterextension PolarionID:75493-[Skipped:Disconnected]cluster extension can be installed with enough permission sa"), func() {
g.It("PolarionID:75493-[OTP][Level0]cluster extension can be installed with enough permission sa", g.Label("original-name:[sig-olmv1][Jira:OLM] clusterextension PolarionID:75493-[Skipped:Disconnected]cluster extension can be installed with enough permission sa"), func() {
exutil.SkipForSNOCluster(oc)
olmv1util.ValidateAccessEnvironment(oc)
var (
caseID = "75493"
ns = "ns-" + caseID
Expand Down Expand Up @@ -454,11 +458,12 @@ var _ = g.Describe("[sig-olmv1][Jira:OLM] clusterextension", g.Label("NonHyperSh
o.Expect(olmv1util.Appearance(oc, exutil.Disappear, "services", "nginx-ok-v3283-75493-controller-manager-metrics-service", "-n", ns)).To(o.BeTrue())
})

g.It("PolarionID:81538-[OTP][Skipped:Disconnected]preflight check on permission on allns mode", g.Label("original-name:[sig-olmv1][Jira:OLM] clusterextension PolarionID:81538-[Skipped:Disconnected]preflight check on permission on allns mode"), func() {
g.It("PolarionID:81538-[OTP]preflight check on permission on allns mode", g.Label("original-name:[sig-olmv1][Jira:OLM] clusterextension PolarionID:81538-[Skipped:Disconnected]preflight check on permission on allns mode"), func() {
if !olmv1util.IsFeaturegateEnabled(oc, "NewOLMPreflightPermissionChecks") {
g.Skip("NewOLMPreflightPermissionChecks feature gate is disabled. This test requires preflight permission validation to be enabled.")
}
exutil.SkipForSNOCluster(oc)
olmv1util.ValidateAccessEnvironment(oc)
var (
caseID = "81538"
ns = "ns-" + caseID
Expand Down Expand Up @@ -567,12 +572,13 @@ var _ = g.Describe("[sig-olmv1][Jira:OLM] clusterextension", g.Label("NonHyperSh
ce.CheckClusterExtensionCondition(oc, "Progressing", "reason", "Succeeded", 10, 600, 0)
})

g.It("PolarionID:81664-[OTP][Skipped:Disconnected]preflight check on permission on own ns mode", g.Label("original-name:[sig-olmv1][Jira:OLM] clusterextension PolarionID:81664-[Skipped:Disconnected]preflight check on permission on own ns mode"), func() {
g.It("PolarionID:81664-[OTP]preflight check on permission on own ns mode", g.Label("original-name:[sig-olmv1][Jira:OLM] clusterextension PolarionID:81664-[Skipped:Disconnected]preflight check on permission on own ns mode"), func() {
if !olmv1util.IsFeaturegateEnabled(oc, "NewOLMPreflightPermissionChecks") ||
!olmv1util.IsFeaturegateEnabled(oc, "NewOLMOwnSingleNamespace") {
g.Skip("Required feature gates are disabled: NewOLMPreflightPermissionChecks and NewOLMOwnSingleNamespace must both be enabled for this test.")
}
exutil.SkipForSNOCluster(oc)
olmv1util.ValidateAccessEnvironment(oc)
var (
caseID = "81664"
ns = "ns-" + caseID
Expand Down Expand Up @@ -676,12 +682,13 @@ var _ = g.Describe("[sig-olmv1][Jira:OLM] clusterextension", g.Label("NonHyperSh
ce.Create(oc)
})

g.It("PolarionID:81696-[OTP][Skipped:Disconnected]preflight check on permission on single ns mode", g.Label("original-name:[sig-olmv1][Jira:OLM] clusterextension PolarionID:81696-[Skipped:Disconnected]preflight check on permission on single ns mode"), func() {
g.It("PolarionID:81696-[OTP]preflight check on permission on single ns mode", g.Label("original-name:[sig-olmv1][Jira:OLM] clusterextension PolarionID:81696-[Skipped:Disconnected]preflight check on permission on single ns mode"), func() {
if !olmv1util.IsFeaturegateEnabled(oc, "NewOLMPreflightPermissionChecks") ||
!olmv1util.IsFeaturegateEnabled(oc, "NewOLMOwnSingleNamespace") {
g.Skip("Required feature gates are disabled: NewOLMPreflightPermissionChecks and NewOLMOwnSingleNamespace must both be enabled for this test.")
}
exutil.SkipForSNOCluster(oc)
olmv1util.ValidateAccessEnvironment(oc)
var (
caseID = "81696"
ns = "ns-" + caseID
Expand Down Expand Up @@ -809,8 +816,9 @@ var _ = g.Describe("[sig-olmv1][Jira:OLM] clusterextension", g.Label("NonHyperSh
ce.Create(oc)
})

g.It("PolarionID:74618-[OTP][Skipped:Disconnected]ClusterExtension supports simple registry vzero bundles only", g.Label("original-name:[sig-olmv1][Jira:OLM] clusterextension PolarionID:74618-[Skipped:Disconnected]ClusterExtension supports simple registry vzero bundles only"), func() {
g.It("PolarionID:74618-[OTP]ClusterExtension supports simple registry vzero bundles only", g.Label("original-name:[sig-olmv1][Jira:OLM] clusterextension PolarionID:74618-[Skipped:Disconnected]ClusterExtension supports simple registry vzero bundles only"), func() {
exutil.SkipForSNOCluster(oc)
olmv1util.ValidateAccessEnvironment(oc)
var (
ns = "ns-74618"
sa = "sa74618"
Expand Down
Loading