Skip to content

Commit 055558b

Browse files
committed
[SRVKP-7207] verify olmskiprange path
1 parent 1fafe66 commit 055558b

File tree

6 files changed

+139
-2
lines changed

6 files changed

+139
-2
lines changed

pkg/oc/oc.go

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"encoding/json"
55
"fmt"
66
"log"
7+
"os"
78
"slices"
89
"strings"
910
"time"
@@ -170,3 +171,101 @@ func CopySecret(secretName string, sourceNamespace string, destNamespace string)
170171
cmd.MustSucceed("bash", "-c", fmt.Sprintf(`echo '%s' | kubectl apply -n %s -f -`, cmdOutput, destNamespace))
171172
log.Printf("Successfully copied secret %s from %s to %s", secretName, sourceNamespace, destNamespace)
172173
}
174+
175+
func FetchOlmSkipRange() (string, error) {
176+
olmManifestJson := cmd.MustSucceed("oc", "get", "packagemanifests", "openshift-pipelines-operator-rh", "-n", "openshift-marketplace", "-o", "json").Stdout()
177+
SkipRange := cmd.MustSucceed("bash", "-c", fmt.Sprintf(`echo '%s' | jq -r '.status.channels[].currentCSVDesc.annotations["olm.skipRange"]'`, olmManifestJson)).Stdout()
178+
if SkipRange == "" {
179+
return "", fmt.Errorf("OLM Skip Range is empty")
180+
}
181+
return SkipRange, nil
182+
}
183+
184+
func GetOlmSkipRange(upgradeType, fieldName, fileName string) {
185+
SkipRange, err := FetchOlmSkipRange()
186+
if err != nil {
187+
log.Printf("Error fetching OLM Skip Range: %v", err)
188+
return
189+
}
190+
file, err := os.OpenFile(resource.Path(fileName), os.O_RDWR, 0644)
191+
if err != nil {
192+
log.Printf("Error opening file %s: %v", fileName, err)
193+
return
194+
}
195+
defer file.Close()
196+
var existingData map[string]string
197+
if err := json.NewDecoder(file).Decode(&existingData); err != nil {
198+
log.Printf("Error decoding existing data from file %s: %v", fileName, err)
199+
return
200+
}
201+
if upgradeType == "pre-upgrade" {
202+
existingData["pre-upgrade-olm-skip-range"] = SkipRange
203+
log.Printf("Pre-upgrade OLM Skip Range is stored as: %s", SkipRange)
204+
} else if upgradeType == "post-upgrade" {
205+
existingData["post-upgrade-olm-skip-range"] = SkipRange
206+
log.Printf("Post-upgrade OLM Skip Range is stored as: %s", SkipRange)
207+
}
208+
if _, err := file.Seek(0, 0); err != nil {
209+
log.Printf("Error seeking file %s: %v", fileName, err)
210+
return
211+
}
212+
encoder := json.NewEncoder(file)
213+
encoder.SetIndent("", " ") // Pretty-print the JSON output
214+
if err := encoder.Encode(existingData); err != nil {
215+
log.Printf("Error writing updated data to file %s: %v", fileName, err)
216+
return
217+
}
218+
log.Printf("OLM Skip Range for '%s' has been saved to file %s", fieldName, fileName)
219+
}
220+
221+
func ValidateOlmSkipRange() {
222+
SkipRange, err := FetchOlmSkipRange()
223+
if err != nil {
224+
log.Printf("Error fetching OLM Skip Range: %v", err)
225+
return
226+
}
227+
lines := strings.Split(SkipRange, "\n")
228+
if len(lines) == 0 {
229+
log.Printf("Error: No lines found in OLM Skip Range")
230+
return
231+
}
232+
firstLine := lines[0]
233+
pipelineVersion := os.Getenv("OPERATOR_VERSION")
234+
if strings.Contains(firstLine, pipelineVersion) {
235+
log.Printf("Success: OPERATOR_VERSION '%s' matches the first line of OLM Skip Range: '%s'", pipelineVersion, firstLine)
236+
} else {
237+
testsuit.T.Fail(fmt.Errorf("Error: OPERATOR_VERSION '%s' does not match the first line of OLM Skip Range: '%s'", pipelineVersion, firstLine))
238+
}
239+
}
240+
241+
func ValidateOlmSkipRangeDiff(fileName string, preUpgradeSkipRange string, postUpgradeSkipRange string) {
242+
file, err := os.Open(resource.Path(fileName))
243+
if err != nil {
244+
log.Printf("Error opening file %s: %v", fileName, err)
245+
testsuit.T.Fail(fmt.Errorf("Error opening file %s: %v", fileName, err))
246+
return
247+
}
248+
defer file.Close()
249+
var skipRangeData map[string]string
250+
decoder := json.NewDecoder(file)
251+
if err := decoder.Decode(&skipRangeData); err != nil {
252+
log.Printf("Error decoding JSON from file %s: %v", fileName, err)
253+
testsuit.T.Fail(fmt.Errorf("Error decoding JSON from file %s: %v", fileName, err))
254+
return
255+
}
256+
preUpgradeSkipRange, preExists := skipRangeData[preUpgradeSkipRange]
257+
postUpgradeSkipRange, postExists := skipRangeData[postUpgradeSkipRange]
258+
if !preExists || !postExists || preUpgradeSkipRange == "" || postUpgradeSkipRange == "" {
259+
log.Printf("Error: One of the skip ranges is missing or empty. Pre-Upgrade: %v, Post-Upgrade: %v", preUpgradeSkipRange, postUpgradeSkipRange)
260+
testsuit.T.Fail(fmt.Errorf("One of the skip ranges is missing or empty. Pre-Upgrade: %v, Post-Upgrade: %v", preUpgradeSkipRange, postUpgradeSkipRange))
261+
return
262+
}
263+
log.Printf("Pre-Upgrade Skip Range: %v", preUpgradeSkipRange)
264+
log.Printf("Post-Upgrade Skip Range: %v", postUpgradeSkipRange)
265+
if preUpgradeSkipRange == postUpgradeSkipRange {
266+
log.Printf("OLM Skip Range before and after upgrade are the same. Pre-Upgrade: %s, Post-Upgrade: %s", preUpgradeSkipRange, postUpgradeSkipRange)
267+
} else {
268+
log.Printf("OLM Skip Range mismatch detected! Pre-Upgrade: '%s', Post-Upgrade: '%s'", preUpgradeSkipRange, postUpgradeSkipRange)
269+
testsuit.T.Fail(fmt.Errorf("OLM Skip Range mismatch detected! Pre-Upgrade: '%s', Post-Upgrade: '%s'", preUpgradeSkipRange, postUpgradeSkipRange))
270+
}
271+
}

specs/olm.spec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ Steps:
4646
* Validate manual approval gate deployment
4747
* Validate tektoninstallersets status
4848
* Validate tektoninstallersets names
49+
* Validate OperatorVersion in OlmSkipRange
4950

5051
## Upgrade openshift-pipelines operator: PIPELINES-09-TC02
5152
Tags: upgrade, admin

specs/operator/post-upgrade.spec

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,4 +83,15 @@ Importance: Critical
8383
Steps:
8484
* Switch to project "releasetest-upgrade-s2i"
8585
* Get tags of the imagestream "golang" from namespace "openshift" and store to variable "golang-tags"
86-
* Start and verify pipeline "s2i-go-pipeline" with param "VERSION" with values stored in variable "golang-tags" with workspace "name=source,claimName=shared-pvc"
86+
* Start and verify pipeline "s2i-go-pipeline" with param "VERSION" with values stored in variable "golang-tags" with workspace "name=source,claimName=shared-pvc"
87+
88+
## Validate olm skiprange post upgrade: PIPELINES-19-TC06
89+
Tags: post-upgrade, olm-skip-range
90+
Component: Pipelines
91+
Level: Integration
92+
Type: Functional
93+
Importance: Critical
94+
95+
Steps:
96+
* Get olm-skip-range "post-upgrade" and save to field "post-upgrade-olm-skip-range" in file "testdata/olm/skiprange.json"
97+
* Validate the fields "pre-upgrade-olm-skip-range" and "post-upgrade-olm-skip-range" are same in file "testdata/olm/skiprange.json"

specs/operator/pre-upgrade.spec

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,4 +126,14 @@ Steps:
126126
|S.NO|resource_dir |
127127
|----|------------------------------------------------------|
128128
|1 |testdata/ecosystem/pipelines/s2i-go.yaml|
129-
|2 |testdata/pvc/pvc.yaml |
129+
|2 |testdata/pvc/pvc.yaml |
130+
131+
## Validate olm skiprange pre upgrade: PIPELINES-18-TC06
132+
Tags: pre-upgrade, olm-skip-range
133+
Component: Pipelines
134+
Level: Integration
135+
Type: Functional
136+
Importance: Critical
137+
138+
Steps:
139+
* Get olm-skip-range "pre-upgrade" and save to field "pre-upgrade-olm-skip-range" in file "testdata/olm/skiprange.json"

steps/olm/operator.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,3 +194,15 @@ var _ = gauge.Step("Store Cosign public key in file", func() {
194194
var _ = gauge.Step("Verify <binary> version from the pipelinerun logs", func(binary string) {
195195
pipelines.CheckLogVersion(store.Clients(), binary, store.Namespace())
196196
})
197+
198+
var _ = gauge.Step("Get olm-skip-range <upgradeType> and save to field <fieldName> in file <fileName>", func(upgradeType string, fieldName string, filename string) {
199+
oc.GetOlmSkipRange(upgradeType, fieldName, filename)
200+
})
201+
202+
var _ = gauge.Step("Validate the fields <preUpgradeSkipRange> and <postUpgradeSkipRange> are same in file <fileName>", func(preUpgradeSkipRange string, postUpgradeSkipRange string, fileName string) {
203+
oc.ValidateOlmSkipRangeDiff(fileName, preUpgradeSkipRange, postUpgradeSkipRange)
204+
})
205+
206+
var _ = gauge.Step("Validate OperatorVersion in OlmSkipRange", func() {
207+
oc.ValidateOlmSkipRange()
208+
})

testdata/olm/skiprange.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"pre-upgrade-olm-skip-range": "",
3+
"post-upgrade-olm-skip-range": ""
4+
}

0 commit comments

Comments
 (0)