Skip to content

Commit b042f6b

Browse files
Merge pull request #29967 from Prashanth684/okd-cvo-test-fix
MULTIARCH-5390: Reapply "Merge pull request #29808 from Prashanth684/4552-cvo-test"
2 parents e82193f + 5b12113 commit b042f6b

File tree

6 files changed

+130
-0
lines changed

6 files changed

+130
-0
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
reviewers:
2+
- cluster-version-operator-test-case-reviewers
3+
- Prashanth684
4+
approvers:
5+
- cluster-version-operator-test-case-approvers
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package clusterversion
2+
3+
import (
4+
"context"
5+
6+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
7+
8+
g "github.com/onsi/ginkgo/v2"
9+
o "github.com/onsi/gomega"
10+
configv1 "github.com/openshift/api/config/v1"
11+
configclient "github.com/openshift/client-go/config/clientset/versioned"
12+
exutil "github.com/openshift/origin/test/extended/util"
13+
)
14+
15+
// The desired architecture field was introduced as part of a feature that provides a toggle for an imagestream's importMode: https://github.com/openshift/api/pull/2024
16+
var _ = g.Describe("[sig-cluster-lifecycle][OCPFeatureGate:ImageStreamImportMode] ClusterVersion API", func() {
17+
defer g.GinkgoRecover()
18+
oc := exutil.NewCLIWithoutNamespace("")
19+
20+
g.It("desired architecture should be valid when architecture is set in release payload metadata [apigroup:config.openshift.io]", func() {
21+
TestClusterVersionDesiredArchitecture(g.GinkgoT(), oc)
22+
})
23+
24+
})
25+
26+
func TestClusterVersionDesiredArchitecture(t g.GinkgoTInterface, oc *exutil.CLI) {
27+
ctx := context.Background()
28+
29+
archMetadata, _, err := oc.AsAdmin().Run("adm", "release", "info", `-ojsonpath={.metadata.metadata.release\.openshift\.io\/architecture}`).Outputs()
30+
if err != nil {
31+
cleanup, cmdArgs, err := exutil.PrepareImagePullSecretAndCABundle(oc)
32+
if cleanup != nil {
33+
defer cleanup()
34+
}
35+
o.Expect(err).NotTo(o.HaveOccurred())
36+
archMetadata, _, err = oc.AsAdmin().Run("adm", "release", "info", `-ojsonpath={.metadata.metadata.release\.openshift\.io\/architecture}`).Args(cmdArgs...).Outputs()
37+
o.Expect(err).NotTo(o.HaveOccurred())
38+
} else {
39+
o.Expect(err).NotTo(o.HaveOccurred())
40+
}
41+
42+
// Check desired.Architecture in the CV
43+
configClient, err := configclient.NewForConfig(oc.AdminConfig())
44+
o.Expect(err).NotTo(o.HaveOccurred())
45+
clusterVersion, err := configClient.ConfigV1().ClusterVersions().Get(ctx, "version", metav1.GetOptions{})
46+
o.Expect(err).NotTo(o.HaveOccurred())
47+
48+
if archMetadata == "multi" {
49+
o.Expect(clusterVersion.Status.Desired.Architecture).To(o.Equal(configv1.ClusterVersionArchitectureMulti))
50+
} else {
51+
o.Expect(clusterVersion.Status.Desired.Architecture).To(o.BeEmpty())
52+
}
53+
}

test/extended/include.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
_ "github.com/openshift/origin/test/extended/cli"
2020
_ "github.com/openshift/origin/test/extended/cloud_controller_manager"
2121
_ "github.com/openshift/origin/test/extended/cluster"
22+
_ "github.com/openshift/origin/test/extended/clusterversion"
2223
_ "github.com/openshift/origin/test/extended/cmd"
2324
_ "github.com/openshift/origin/test/extended/controller_manager"
2425
_ "github.com/openshift/origin/test/extended/coreos"

test/extended/util/annotate/generated/zz_generated.annotations.go

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/extended/util/clusterversion.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@ import (
44
"context"
55
"encoding/json"
66
"fmt"
7+
"io/ioutil"
8+
"os"
79

810
corev1 "k8s.io/api/core/v1"
11+
apierrors "k8s.io/apimachinery/pkg/api/errors"
912
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1013
restclient "k8s.io/client-go/rest"
1114
"k8s.io/kubernetes/test/e2e/framework"
@@ -113,3 +116,66 @@ func DetermineImageFromRelease(ctx context.Context, oc *CLI, imageTagName string
113116
}
114117
return "", fmt.Errorf("Could not find image: %s", imageTagName)
115118
}
119+
120+
// prepareImagePullSecretAndCABundle prepares the image pull secret and optional user CA bundle for use,
121+
// returning the necessary command-line arguments, or an error if setup fails.
122+
func PrepareImagePullSecretAndCABundle(oc *CLI) (func(), []string, error) {
123+
kubeClient := oc.AdminKubeClient()
124+
// Try to use the same pull secret as the cluster under test
125+
imagePullSecret, err := kubeClient.CoreV1().Secrets("openshift-config").Get(context.Background(), "pull-secret", metav1.GetOptions{})
126+
if err != nil {
127+
return nil, nil, fmt.Errorf("unable to get pull secret from cluster: %v", err)
128+
}
129+
130+
// cache file to local temp location
131+
imagePullFile, err := ioutil.TempFile("", "image-pull-secret")
132+
if err != nil {
133+
return nil, nil, fmt.Errorf("unable to create a temporary file: %v", err)
134+
}
135+
cleanup := func() {
136+
os.Remove(imagePullFile.Name())
137+
}
138+
139+
// write the content
140+
imagePullSecretBytes := imagePullSecret.Data[".dockerconfigjson"]
141+
if _, err = imagePullFile.Write(imagePullSecretBytes); err != nil {
142+
return cleanup, nil, fmt.Errorf("unable to write pull secret to temp file: %v", err)
143+
}
144+
if err = imagePullFile.Close(); err != nil {
145+
return cleanup, nil, fmt.Errorf("unable to close file: %v", err)
146+
}
147+
148+
cmdArgs := []string{"--registry-config", imagePullFile.Name()}
149+
150+
// Trust also user trusted CA from the cluster under test
151+
userCaBundle, err := kubeClient.CoreV1().ConfigMaps("openshift-config").Get(context.Background(), "user-ca-bundle", metav1.GetOptions{})
152+
if err != nil {
153+
if !apierrors.IsNotFound(err) {
154+
return cleanup, nil, fmt.Errorf("unable to get user-ca-bundle configmap from cluster: %v", err)
155+
}
156+
}
157+
158+
if userCaBundle != nil {
159+
// cache file to local temp location
160+
userCaBundleFile, err := ioutil.TempFile("", "user-ca-bundle")
161+
if err != nil {
162+
return cleanup, nil, fmt.Errorf("unable to create a temporary file: %v", err)
163+
}
164+
165+
cleanup = func() {
166+
os.Remove(imagePullFile.Name())
167+
os.Remove(userCaBundleFile.Name())
168+
}
169+
170+
// write the content
171+
userCaBundleString := userCaBundle.Data["ca-bundle.crt"]
172+
if _, err = userCaBundleFile.WriteString(userCaBundleString); err != nil {
173+
return cleanup, nil, fmt.Errorf("unable to write user CA bundle to temp file: %v", err)
174+
}
175+
if err = userCaBundleFile.Close(); err != nil {
176+
return cleanup, nil, fmt.Errorf("unable to close file: %v", err)
177+
}
178+
cmdArgs = append(cmdArgs, "--certificate-authority", userCaBundleFile.Name())
179+
}
180+
return cleanup, cmdArgs, nil
181+
}

zz_generated.manifests/test-reporting.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,9 @@ spec:
148148
mock driver Static provisioning should honor pv retain reclaim policy'
149149
- featureGate: ImageStreamImportMode
150150
tests:
151+
- testName: '[sig-cluster-lifecycle][OCPFeatureGate:ImageStreamImportMode] ClusterVersion
152+
API desired architecture should be valid when architecture is set in release
153+
payload metadata [apigroup:config.openshift.io]'
151154
- testName: '[sig-imageregistry][OCPFeatureGate:ImageStreamImportMode][Serial]
152155
ImageStream API import mode should be Legacy if the import mode specified
153156
in image.config.openshift.io config is Legacy [apigroup:image.openshift.io]'

0 commit comments

Comments
 (0)