|
4 | 4 | "encoding/json" |
5 | 5 | "fmt" |
6 | 6 | "log" |
| 7 | + "os" |
7 | 8 | "slices" |
8 | 9 | "strings" |
9 | 10 | "time" |
@@ -170,3 +171,101 @@ func CopySecret(secretName string, sourceNamespace string, destNamespace string) |
170 | 171 | cmd.MustSucceed("bash", "-c", fmt.Sprintf(`echo '%s' | kubectl apply -n %s -f -`, cmdOutput, destNamespace)) |
171 | 172 | log.Printf("Successfully copied secret %s from %s to %s", secretName, sourceNamespace, destNamespace) |
172 | 173 | } |
| 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 | +} |
0 commit comments