Skip to content

Commit ac47b30

Browse files
Merge pull request #30748 from openshift-cherrypick-robot/cherry-pick-30649-to-release-4.21
[release-4.21] OCPBUGS-75513: update test logic for degraded cluster run
2 parents 543318f + 4bf314e commit ac47b30

3 files changed

Lines changed: 49 additions & 17 deletions

File tree

cmd/openshift-tests/openshift-tests.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,15 @@ func main() {
6363
os.Unsetenv("ENABLE_STORAGE_GCE_PD_DRIVER")
6464
}
6565

66+
// Detect intentionally degraded clusters (e.g. TNF degraded) based on
67+
// CI-provided environment signals and propagate that context to extended tests
68+
if os.Getenv("DEGRADED_NODE") == "true" {
69+
exutil.ClusterDegraded = true
70+
logrus.Infof("openshift-tests targeting intentionally degraded cluster")
71+
}
72+
6673
pflag.CommandLine.SetNormalizeFunc(utilflag.WordSepNormalizeFunc)
67-
//pflag.CommandLine.AddGoFlagSet(goflag.CommandLine)
74+
// pflag.CommandLine.AddGoFlagSet(goflag.CommandLine)
6875

6976
extensionRegistry, originExtension, err := extensions.InitializeOpenShiftTestsExtensionFramework()
7077
if err != nil {

test/extended/operators/certs.go

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,17 @@ var _ = g.Describe(fmt.Sprintf("[sig-arch][Late][Jira:%q]", "kube-apiserver"), g
128128
// Skip metal jobs if test image pullspec cannot be determined
129129
if jobType.Platform != "metal" || err == nil {
130130
o.Expect(err).NotTo(o.HaveOccurred())
131-
onDiskPKIContent, err = fetchOnDiskCertificates(ctx, kubeClient, oc.AdminConfig(), masters, openshiftTestImagePullSpec)
132-
o.Expect(err).NotTo(o.HaveOccurred())
131+
132+
// Only relax on-disk cert collection when the cluster is intentionally degraded
133+
// and the topology is Two-Node Fencing (DualReplica).
134+
if exutil.ClusterDegraded && exutil.IsTwoNodeFencing(ctx, configClient) {
135+
readyMasters, _ := filterReadyNodes(masters)
136+
onDiskPKIContent, err = fetchOnDiskCertificates(ctx, kubeClient, oc.AdminConfig(), readyMasters, openshiftTestImagePullSpec)
137+
o.Expect(err).NotTo(o.HaveOccurred())
138+
} else {
139+
onDiskPKIContent, err = fetchOnDiskCertificates(ctx, kubeClient, oc.AdminConfig(), masters, openshiftTestImagePullSpec)
140+
o.Expect(err).NotTo(o.HaveOccurred())
141+
}
133142
}
134143

135144
actualPKIContent = certgraphanalysis.MergePKILists(ctx, inClusterPKIContent, onDiskPKIContent)
@@ -160,14 +169,13 @@ var _ = g.Describe(fmt.Sprintf("[sig-arch][Late][Jira:%q]", "kube-apiserver"), g
160169
o.Expect(err).NotTo(o.HaveOccurred())
161170

162171
pkiDir := filepath.Join(exutil.ArtifactDirPath(), "rawTLSInfo")
163-
err = os.MkdirAll(pkiDir, 0755)
172+
err = os.MkdirAll(pkiDir, 0o755)
164173
o.Expect(err).NotTo(o.HaveOccurred())
165-
err = os.WriteFile(filepath.Join(pkiDir, tlsArtifactFilename), jsonBytes, 0644)
174+
err = os.WriteFile(filepath.Join(pkiDir, tlsArtifactFilename), jsonBytes, 0o644)
166175
o.Expect(err).NotTo(o.HaveOccurred())
167176
})
168177

169178
g.It("all tls artifacts must be registered", func() {
170-
171179
violationsPKIContent, err := certs.GetPKIInfoFromEmbeddedOwnership(ownership.PKIViolations)
172180
o.Expect(err).NotTo(o.HaveOccurred())
173181

@@ -181,7 +189,6 @@ var _ = g.Describe(fmt.Sprintf("[sig-arch][Late][Jira:%q]", "kube-apiserver"), g
181189

182190
_, err := certgraphutils.LocateCertKeyPairBySecretLocation(currLocation, expectedPKIContent.CertKeyPairs)
183191
if err != nil {
184-
185192
newTLSRegistry.CertKeyPairs = append(newTLSRegistry.CertKeyPairs, certgraphapi.PKIRegistryCertKeyPair{InClusterLocation: &actualPKIContent.InClusterResourceData.CertKeyPairs[i]})
186193
}
187194

@@ -269,11 +276,11 @@ var _ = g.Describe(fmt.Sprintf("[sig-arch][Late][Jira:%q]", "kube-apiserver"), g
269276
if len(newTLSRegistry.CertKeyPairs) > 0 || len(newTLSRegistry.CertificateAuthorityBundles) > 0 {
270277
registryString, err := json.MarshalIndent(newTLSRegistry, "", " ")
271278
if err != nil {
272-
//g.Fail("Failed to marshal registry %#v: %v", newTLSRegistry, err)
279+
// g.Fail("Failed to marshal registry %#v: %v", newTLSRegistry, err)
273280
testresult.Flakef("Failed to marshal registry %#v: %v", newTLSRegistry, err)
274281
}
275282
// TODO: uncomment when test no longer fails and enhancement is merged
276-
//g.Fail(fmt.Sprintf("Unregistered TLS certificates:\n%s", registryString))
283+
// g.Fail(fmt.Sprintf("Unregistered TLS certificates:\n%s", registryString))
277284
testresult.Flakef("Unregistered TLS certificates found:\n%s\nSee tls/ownership/README.md in origin repo", registryString)
278285
}
279286
})
@@ -285,7 +292,7 @@ var _ = g.Describe(fmt.Sprintf("[sig-arch][Late][Jira:%q]", "kube-apiserver"), g
285292

286293
if len(messages) > 0 {
287294
// TODO: uncomment when test no longer fails and enhancement is merged
288-
//g.Fail(strings.Join(messages, "\n"))
295+
// g.Fail(strings.Join(messages, "\n"))
289296
testresult.Flakef("%s", strings.Join(messages, "\n"))
290297
}
291298
})
@@ -323,7 +330,6 @@ var _ = g.Describe(fmt.Sprintf("[sig-arch][Late][Jira:%q]", "kube-apiserver"), g
323330
testresult.Flakef("Errors found: %s", utilerrors.NewAggregate(errs).Error())
324331
}
325332
})
326-
327333
})
328334

329335
func fetchOnDiskCertificates(ctx context.Context, kubeClient kubernetes.Interface, podRESTConfig *rest.Config, nodeList []*corev1.Node, testPullSpec string) (*certgraphapi.PKIList, error) {
@@ -480,3 +486,21 @@ func isCertKeyPairFromIgnoredNamespace(cert certgraphapi.CertKeyPair, ignoredNam
480486
}
481487
return false
482488
}
489+
490+
func filterReadyNodes(nodes []*corev1.Node) (ready []*corev1.Node, notReady []string) {
491+
for _, n := range nodes {
492+
isReady := false
493+
for _, c := range n.Status.Conditions {
494+
if c.Type == corev1.NodeReady && c.Status == corev1.ConditionTrue {
495+
isReady = true
496+
break
497+
}
498+
}
499+
if isReady {
500+
ready = append(ready, n)
501+
} else {
502+
notReady = append(notReady, n.Name)
503+
}
504+
}
505+
return ready, notReady
506+
}

test/extended/util/framework.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,6 @@ func WaitForOpenShiftNamespaceImageStreams(oc *CLI) error {
327327

328328
// Check to see if SamplesOperator managementState is Removed
329329
out, err := oc.AsAdmin().Run("get").Args("configs.samples.operator.openshift.io", "cluster", "-o", "yaml").Output()
330-
331330
if err != nil {
332331
e2e.Logf("\n error on getting samples operator CR: %+v\n%#v\n", err, out)
333332
}
@@ -781,7 +780,7 @@ func VarSubOnFile(srcFile string, destFile string, vars map[string]string) error
781780
k = "${" + k + "}"
782781
srcString = strings.Replace(srcString, k, v, -1) // -1 means unlimited replacements
783782
}
784-
err = ioutil.WriteFile(destFile, []byte(srcString), 0644)
783+
err = ioutil.WriteFile(destFile, []byte(srcString), 0o644)
785784
}
786785
return err
787786
}
@@ -1654,11 +1653,11 @@ func restoreFixtureAsset(dir, name string) error {
16541653
if err != nil {
16551654
return err
16561655
}
1657-
err = os.MkdirAll(assetFilePath(dir, filepath.Dir(name)), os.FileMode(0755))
1656+
err = os.MkdirAll(assetFilePath(dir, filepath.Dir(name)), os.FileMode(0o755))
16581657
if err != nil {
16591658
return err
16601659
}
1661-
err = ioutil.WriteFile(assetFilePath(dir, name), data, 0640)
1660+
err = ioutil.WriteFile(assetFilePath(dir, name), data, 0o640)
16621661
if err != nil {
16631662
return err
16641663
}
@@ -1990,10 +1989,10 @@ type GitRepo struct {
19901989
// AddAndCommit commits a file with its content to local repo
19911990
func (r GitRepo) AddAndCommit(file, content string) error {
19921991
dir := filepath.Dir(file)
1993-
if err := os.MkdirAll(filepath.Join(r.RepoPath, dir), 0777); err != nil {
1992+
if err := os.MkdirAll(filepath.Join(r.RepoPath, dir), 0o777); err != nil {
19941993
return err
19951994
}
1996-
if err := ioutil.WriteFile(filepath.Join(r.RepoPath, file), []byte(content), 0666); err != nil {
1995+
if err := ioutil.WriteFile(filepath.Join(r.RepoPath, file), []byte(content), 0o666); err != nil {
19971996
return err
19981997
}
19991998
if err := r.repo.Add(r.RepoPath, file); err != nil {
@@ -2347,6 +2346,8 @@ func IsTwoNodeFencing(ctx context.Context, configClient clientconfigv1.Interface
23472346
return infrastructure.Status.ControlPlaneTopology == configv1.DualReplicaTopologyMode
23482347
}
23492348

2349+
var ClusterDegraded bool
2350+
23502351
func groupName(groupVersionName string) string {
23512352
return strings.Split(groupVersionName, "/")[0]
23522353
}

0 commit comments

Comments
 (0)