Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[
{
"name": "[sig-operator][Jira:OLM] OLMv0 within all namespace PolarionID:21418-PolarionID:25679-[OTP][Skipped:Disconnected]Cluster resource created and deleted correctly [Serial]",
"name": "[sig-operator][Jira:OLM] OLMv0 within all namespace PolarionID:21418-PolarionID:25679-[OTP]Cluster resource created and deleted correctly [Serial]",
"originalName": "[sig-operator][Jira:OLM] OLMv0 within all namespace PolarionID:21418-PolarionID:25679-[Skipped:Disconnected]Cluster resource created and deleted correctly [Serial]",
"labels": {
"Extended": {},
Expand Down Expand Up @@ -34,7 +34,7 @@
}
},
{
"name": "[sig-operator][Jira:OLM] OLMv0 within all namespace PolarionID:21484-PolarionID:21532-[OTP][Skipped:Disconnected]watch special or all namespace by operator group",
"name": "[sig-operator][Jira:OLM] OLMv0 within all namespace PolarionID:21484-PolarionID:21532-[OTP]watch special or all namespace by operator group",
"originalName": "[sig-operator][Jira:OLM] OLMv0 within all namespace PolarionID:21484-PolarionID:21532-[Skipped:Disconnected]watch special or all namespace by operator group",
"labels": {
"Extended": {},
Expand All @@ -48,7 +48,7 @@
"environmentSelector": {}
},
{
"name": "[sig-operator][Jira:OLM] OLMv0 within all namespace PolarionID:24906-[OTP][Skipped:Disconnected]Operators requesting cluster-scoped permission can trigger kube GC bug[Serial]",
"name": "[sig-operator][Jira:OLM] OLMv0 within all namespace PolarionID:24906-[OTP]Operators requesting cluster-scoped permission can trigger kube GC bug[Serial]",
"originalName": "[sig-operator][Jira:OLM] OLMv0 within all namespace PolarionID:24906-[Skipped:Disconnected]Operators requesting cluster-scoped permission can trigger kube GC bug[Serial]",
"labels": {
"Extended": {},
Expand Down Expand Up @@ -348,7 +348,7 @@
"environmentSelector": {}
},
{
"name": "[sig-operator][Jira:OLM] OLMv0 with multi ns PolarionID:71119-[OTP][Skipped:Disconnected]pod does not start for installing operator of multi-ns mode when og is in one of the ns[Serial]",
"name": "[sig-operator][Jira:OLM] OLMv0 with multi ns PolarionID:71119-[OTP]pod does not start for installing operator of multi-ns mode when og is in one of the ns[Serial][Slow]",
"originalName": "[sig-operator][Jira:OLM] OLMv0 with multi ns PolarionID:71119-[Skipped:Disconnected]pod does not start for installing operator of multi-ns mode when og is in one of the ns[Serial]",
"labels": {
"Extended": {},
Expand Down Expand Up @@ -472,7 +472,7 @@
}
},
{
"name": "[sig-operator][Jira:OLM] OLMv0 within a namespace PolarionID:23170-[OTP][Skipped:Disconnected]API labels should be hash",
"name": "[sig-operator][Jira:OLM] OLMv0 within a namespace PolarionID:23170-[OTP]API labels should be hash",
"originalName": "[sig-operator][Jira:OLM] OLMv0 within a namespace PolarionID:23170-[Skipped:Disconnected]API labels should be hash",
"labels": {
"Extended": {},
Expand All @@ -486,7 +486,7 @@
"environmentSelector": {}
},
{
"name": "[sig-operator][Jira:OLM] OLMv0 within a namespace PolarionID:20979-[OTP][Skipped:Disconnected]only one IP is generated",
"name": "[sig-operator][Jira:OLM] OLMv0 within a namespace PolarionID:20979-[OTP]only one IP is generated",
"originalName": "[sig-operator][Jira:OLM] OLMv0 within a namespace PolarionID:20979-[Skipped:Disconnected]only one IP is generated",
"labels": {
"Extended": {},
Expand Down Expand Up @@ -565,7 +565,7 @@
"environmentSelector": {}
},
{
"name": "[sig-operator][Jira:OLM] OLMv0 within a namespace PolarionID:29723-[OTP][Skipped:Disconnected]As cluster admin find abnormal status condition via components of operator resource",
"name": "[sig-operator][Jira:OLM] OLMv0 within a namespace PolarionID:29723-[OTP]As cluster admin find abnormal status condition via components of operator resource",
"originalName": "[sig-operator][Jira:OLM] OLMv0 within a namespace PolarionID:29723-[Skipped:Disconnected]As cluster admin find abnormal status condition via components of operator resource",
"labels": {
"Extended": {},
Expand All @@ -582,7 +582,7 @@
}
},
{
"name": "[sig-operator][Jira:OLM] OLMv0 within a namespace PolarionID:30762-[OTP][Skipped:Disconnected]installs bundles with v1 CRDs",
"name": "[sig-operator][Jira:OLM] OLMv0 within a namespace PolarionID:30762-[OTP]installs bundles with v1 CRDs",
"originalName": "[sig-operator][Jira:OLM] OLMv0 within a namespace PolarionID:30762-[Skipped:Disconnected]installs bundles with v1 CRDs",
"labels": {
"Extended": {},
Expand All @@ -596,7 +596,7 @@
"environmentSelector": {}
},
{
"name": "[sig-operator][Jira:OLM] OLMv0 within a namespace PolarionID:27683-[OTP][Skipped:Disconnected]InstallPlans can install from extracted bundles",
"name": "[sig-operator][Jira:OLM] OLMv0 within a namespace PolarionID:27683-[OTP]InstallPlans can install from extracted bundles",
"originalName": "[sig-operator][Jira:OLM] OLMv0 within a namespace PolarionID:27683-[Skipped:Disconnected]InstallPlans can install from extracted bundles",
"labels": {
"Extended": {},
Expand All @@ -610,7 +610,7 @@
"environmentSelector": {}
},
{
"name": "[sig-operator][Jira:OLM] OLMv0 within a namespace PolarionID:24513-[OTP][Skipped:Disconnected]Operator config support env only",
"name": "[sig-operator][Jira:OLM] OLMv0 within a namespace PolarionID:24513-[OTP]Operator config support env only",
"originalName": "[sig-operator][Jira:OLM] OLMv0 within a namespace PolarionID:24513-[Skipped:Disconnected]Operator config support env only",
"labels": {
"Extended": {},
Expand Down Expand Up @@ -638,7 +638,7 @@
"environmentSelector": {}
},
{
"name": "[sig-operator][Jira:OLM] OLMv0 within a namespace PolarionID:25760-[OTP][Skipped:Disconnected]Operator upgrades does not fail after change the channel",
"name": "[sig-operator][Jira:OLM] OLMv0 within a namespace PolarionID:25760-[OTP]Operator upgrades does not fail after change the channel",
"originalName": "[sig-operator][Jira:OLM] OLMv0 within a namespace PolarionID:25760-[Skipped:Disconnected]Operator upgrades does not fail after change the channel",
"labels": {
"Extended": {},
Expand Down Expand Up @@ -714,7 +714,7 @@
}
},
{
"name": "[sig-operator][Jira:OLM] OLMv0 within a namespace PolarionID:39897-[OTP][Skipped:Disconnected]operator objects should not be recreated after all other associated resources have been deleted[Serial]",
"name": "[sig-operator][Jira:OLM] OLMv0 within a namespace PolarionID:39897-[OTP]operator objects should not be recreated after all other associated resources have been deleted[Serial]",
"originalName": "[sig-operator][Jira:OLM] OLMv0 within a namespace PolarionID:39897-[Skipped:Disconnected]operator objects should not be recreated after all other associated resources have been deleted[Serial]",
"labels": {
"Extended": {},
Expand Down
50 changes: 50 additions & 0 deletions tests-extension/test/qe/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,52 @@ 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:**

**When to use `ValidateAccessEnvironment`:**

1. **Test cases that create CatalogSource or Subscription**:
- If your test supports disconnected environments (both connected+disconnected, or disconnected-only)
- AND your test creates CatalogSource or Subscription resources
- **MUST** call `ValidateAccessEnvironment(oc)` at the beginning of the test
- This applies to both newly created test cases and migrated test cases

2. **Test cases that do NOT create both CatalogSource and Subscription**:
- Optional to use `ValidateAccessEnvironment(oc)`
- Using it won't cause errors, but it's not required
- The validation is primarily for ensuring catalog images can be mirrored

**Usage example:**

```go
g.It("test case supporting disconnected", func() {
olmv0util.ValidateAccessEnvironment(oc) // MUST call if creating CatalogSource/Subscription
// 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 @@ -314,6 +360,10 @@ This ensures Claude Code has access to:

## 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 Down
9 changes: 6 additions & 3 deletions tests-extension/test/qe/specs/olmv0_allns.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ var _ = g.Describe("[sig-operator][Jira:OLM] OLMv0 within all namespace", func()
dr.RmIr(itName)
})

g.It("PolarionID:21418-PolarionID:25679-[OTP][Skipped:Disconnected]Cluster resource created and deleted correctly [Serial]", g.Label("NonHyperShiftHOST"), g.Label("original-name:[sig-operator][Jira:OLM] OLMv0 within all namespace PolarionID:21418-PolarionID:25679-[Skipped:Disconnected]Cluster resource created and deleted correctly [Serial]"), func() {
g.It("PolarionID:21418-PolarionID:25679-[OTP]Cluster resource created and deleted correctly [Serial]", g.Label("NonHyperShiftHOST"), g.Label("original-name:[sig-operator][Jira:OLM] OLMv0 within all namespace PolarionID:21418-PolarionID:25679-[Skipped:Disconnected]Cluster resource created and deleted correctly [Serial]"), func() {
architecture.SkipArchitectures(oc, architecture.PPC64LE, architecture.S390X, architecture.MULTI)
exutil.SkipBaselineCaps(oc, "None")
exutil.SkipNoCapabilities(oc, "marketplace")
Expand All @@ -56,6 +56,7 @@ var _ = g.Describe("[sig-operator][Jira:OLM] OLMv0 within all namespace", func()
os.Getenv("HTTP_PROXY") != "" || os.Getenv("HTTPS_PROXY") != "" || os.Getenv("http_proxy") != "" || os.Getenv("https_proxy") != "" {
g.Skip("it is not supported")
}
olmv0util.ValidateAccessEnvironment(oc)
var (
itName = g.CurrentSpecReport().FullText()
buildPruningBaseDir = exutil.FixturePath("testdata", "olm")
Expand Down Expand Up @@ -241,9 +242,10 @@ var _ = g.Describe("[sig-operator][Jira:OLM] OLMv0 within all namespace", func()
olmv0util.NewCheck("expect", exutil.AsAdmin, exutil.WithoutNamespace, exutil.Compare, "Succeeded", exutil.Ok, []string{"csv", subCockroachdb.InstalledCSV, "-n", subCockroachdb.Namespace, "-o=jsonpath={.status.phase}"}).Check(oc)
})

g.It("PolarionID:21484-PolarionID:21532-[OTP][Skipped:Disconnected]watch special or all namespace by operator group", g.Label("original-name:[sig-operator][Jira:OLM] OLMv0 within all namespace PolarionID:21484-PolarionID:21532-[Skipped:Disconnected]watch special or all namespace by operator group"), func() {
g.It("PolarionID:21484-PolarionID:21532-[OTP]watch special or all namespace by operator group", g.Label("original-name:[sig-operator][Jira:OLM] OLMv0 within all namespace PolarionID:21484-PolarionID:21532-[Skipped:Disconnected]watch special or all namespace by operator group"), func() {
architecture.SkipArchitectures(oc, architecture.PPC64LE, architecture.S390X, architecture.MULTI)
exutil.SkipNoCapabilities(oc, "marketplace")
olmv0util.ValidateAccessEnvironment(oc)
var (
itName = g.CurrentSpecReport().FullText()
buildPruningBaseDir = exutil.FixturePath("testdata", "olm")
Expand Down Expand Up @@ -321,7 +323,7 @@ var _ = g.Describe("[sig-operator][Jira:OLM] OLMv0 within all namespace", func()

})

g.It("PolarionID:24906-[OTP][Skipped:Disconnected]Operators requesting cluster-scoped permission can trigger kube GC bug[Serial]", g.Label("original-name:[sig-operator][Jira:OLM] OLMv0 within all namespace PolarionID:24906-[Skipped:Disconnected]Operators requesting cluster-scoped permission can trigger kube GC bug[Serial]"), func() {
g.It("PolarionID:24906-[OTP]Operators requesting cluster-scoped permission can trigger kube GC bug[Serial]", g.Label("original-name:[sig-operator][Jira:OLM] OLMv0 within all namespace PolarionID:24906-[Skipped:Disconnected]Operators requesting cluster-scoped permission can trigger kube GC bug[Serial]"), func() {
architecture.SkipArchitectures(oc, architecture.PPC64LE, architecture.S390X, architecture.MULTI)
exutil.SkipBaselineCaps(oc, "None")
exutil.SkipNoCapabilities(oc, "marketplace")
Expand All @@ -339,6 +341,7 @@ var _ = g.Describe("[sig-operator][Jira:OLM] OLMv0 within all namespace", func()
os.Getenv("HTTP_PROXY") != "" || os.Getenv("HTTPS_PROXY") != "" || os.Getenv("http_proxy") != "" || os.Getenv("https_proxy") != "" {
g.Skip("it is not supported")
}
olmv0util.ValidateAccessEnvironment(oc)
var (
itName = g.CurrentSpecReport().FullText()
buildPruningBaseDir = exutil.FixturePath("testdata", "olm")
Expand Down
3 changes: 2 additions & 1 deletion tests-extension/test/qe/specs/olmv0_multins.go
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ var _ = g.Describe("[sig-operator][Jira:OLM] OLMv0 with multi ns", func() {
olmv0util.NewCheck("expect", exutil.AsAdmin, exutil.WithoutNamespace, exutil.Contain, "MultiNamespace InstallModeType not supported", exutil.Ok, []string{"csv", sub.InstalledCSV, "-n", sub.Namespace, "-o=jsonpath={.status.message}"}).Check(oc)
})

g.It("PolarionID:71119-[OTP][Skipped:Disconnected]pod does not start for installing operator of multi-ns mode when og is in one of the ns[Serial]", g.Label("NonHyperShiftHOST"), g.Label("original-name:[sig-operator][Jira:OLM] OLMv0 with multi ns PolarionID:71119-[Skipped:Disconnected]pod does not start for installing operator of multi-ns mode when og is in one of the ns[Serial]"), func() {
g.It("PolarionID:71119-[OTP]pod does not start for installing operator of multi-ns mode when og is in one of the ns[Serial][Slow]", g.Label("NonHyperShiftHOST"), g.Label("original-name:[sig-operator][Jira:OLM] OLMv0 with multi ns PolarionID:71119-[Skipped:Disconnected]pod does not start for installing operator of multi-ns mode when og is in one of the ns[Serial]"), func() {
exutil.SkipForSNOCluster(oc)
exutil.SkipBaselineCaps(oc, "None")
exutil.SkipNoCapabilities(oc, "marketplace")
Expand All @@ -132,6 +132,7 @@ var _ = g.Describe("[sig-operator][Jira:OLM] OLMv0 with multi ns", func() {
os.Getenv("HTTP_PROXY") != "" || os.Getenv("HTTPS_PROXY") != "" || os.Getenv("http_proxy") != "" || os.Getenv("https_proxy") != "" {
g.Skip("it is not supported")
}
olmv0util.ValidateAccessEnvironment(oc)
var (
itName = g.CurrentSpecReport().FullText()
buildPruningBaseDir = exutil.FixturePath("testdata", "olm")
Expand Down
Loading