-
Notifications
You must be signed in to change notification settings - Fork 4.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Marketplace OPSRC&CSC with publisher&displayName #23711
Changes from 6 commits
ec94e01
5d219c5
d65dbcc
220a84b
9117906
6e64b71
956b19f
5bcc154
68ac80d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
package marketplace | ||
|
||
import ( | ||
"fmt" | ||
"strings" | ||
"time" | ||
|
||
g "github.com/onsi/ginkgo" | ||
o "github.com/onsi/gomega" | ||
|
||
exutil "github.com/openshift/origin/test/extended/util" | ||
) | ||
|
||
var _ = g.Describe("[Feature:Marketplace] Marketplace resources with labels provider displayName", func() { | ||
|
||
defer g.GinkgoRecover() | ||
|
||
var ( | ||
oc = exutil.NewCLI("marketplace", exutil.KubeConfigPath()) | ||
allNs = "openshift-operators" | ||
marketplaceNs = "openshift-marketplace" | ||
|
||
opsrcYamltem = exutil.FixturePath("testdata", "marketplace", "opsrc", "02-opsrc.yaml") | ||
cscYamltem = exutil.FixturePath("testdata", "marketplace", "csc", "02-csc.yaml") | ||
) | ||
|
||
g.AfterEach(func() { | ||
//clear the sub,csv resource | ||
allresourcelist := [][]string{ | ||
{"operatorsource", "opsrctestlabel", marketplaceNs}, | ||
{"catalogsourceconfig", "csctestlabel", marketplaceNs}, | ||
} | ||
|
||
for _, source := range allresourcelist { | ||
err := clearResources(oc, source[0], source[1], source[2]) | ||
o.Expect(err).NotTo(o.HaveOccurred()) | ||
} | ||
}) | ||
|
||
//OCP-21728 check the publisher,display,labels of opsrc&csc | ||
g.It("[ocp-21728]create opsrc with labels", func() { | ||
|
||
//create one opsrc with label | ||
opsrcYaml, err := oc.AsAdmin().Run("process").Args("--ignore-unknown-parameters=true", "-f", opsrcYamltem, "-p", "NAME=opsrctestlabel", "NAMESPACE=marketplace_e2e", "LABEL=optestlabel", "DISPLAYNAME=optestlabel", "PUBLISHER=optestlabel", fmt.Sprintf("MARKETPLACE=%s", marketplaceNs)).OutputToFile("config.json") | ||
o.Expect(err).NotTo(o.HaveOccurred()) | ||
|
||
err = createResources(oc, opsrcYaml) | ||
o.Expect(err).NotTo(o.HaveOccurred()) | ||
time.Sleep(30 * time.Second) | ||
|
||
opsrcResourceList := [][]string{ | ||
{"operatorsource", "opsrctestlabel", "-o=jsonpath={.metadata.labels.opsrc-provider}", marketplaceNs}, | ||
{"operatorsource", "opsrctestlabel", "-o=jsonpath={.spec.displayName}", marketplaceNs}, | ||
{"operatorsource", "opsrctestlabel", "-o=jsonpath={.spec.publisher}", marketplaceNs}, | ||
{"catalogsource", "opsrctestlabel", "-o=jsonpath={.metadata.labels.opsrc-provider}", marketplaceNs}, | ||
{"catalogsource", "opsrctestlabel", "-o=jsonpath={.spec.displayName}", marketplaceNs}, | ||
{"catalogsource", "opsrctestlabel", "-o=jsonpath={.spec.publisher}", marketplaceNs}, | ||
} | ||
//check the displayname,provider,labels of opsrc & catalogsource | ||
for _, source := range opsrcResourceList { | ||
msg, _ := getResourceByPath(oc, source[0], source[1], source[2], source[3]) | ||
o.Expect(msg).Should(o.ContainSubstring("optestlabel")) | ||
} | ||
//create one csc with provider&display&labels | ||
cscYaml, err := oc.AsAdmin().Run("process").Args("--ignore-unknown-parameters=true", "-f", cscYamltem, "-p", "NAME=csctestlabel", fmt.Sprintf("NAMESPACE=%s", allNs), fmt.Sprintf("MARKETPLACE=%s", marketplaceNs), "PACKAGES=descheduler-test", "DISPLAYNAME=csctestlabel", "PUBLISHER=csctestlabel").OutputToFile("config.json") | ||
err = createResources(oc, cscYaml) | ||
o.Expect(err).NotTo(o.HaveOccurred()) | ||
time.Sleep(15 * time.Second) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Here, the same as the above. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Update to use wait.Poll |
||
|
||
cscResourceList := [][]string{ | ||
{"catalogsourceconfig", "csctestlabel", "-o=jsonpath={.spec.csDisplayName}", marketplaceNs}, | ||
{"catalogsourceconfig", "csctestlabel", "-o=jsonpath={.spec.csPublisher}", marketplaceNs}, | ||
{"catalogsource", "csctestlabel", "-o=jsonpath={.spec.displayName}", allNs}, | ||
{"catalogsource", "csctestlabel", "-o=jsonpath={.spec.publisher}", allNs}, | ||
} | ||
//check the displayname,provider oc csc & catalogsource | ||
for _, source := range cscResourceList { | ||
msg, _ := getResourceByPath(oc, source[0], source[1], source[2], source[3]) | ||
o.Expect(msg).Should(o.ContainSubstring("csctestlabel")) | ||
} | ||
|
||
//get the packagelist of opsrctestlabel | ||
packageListOpsrc1, _ := getResourceByPath(oc, "operatorsource", "opsrctestlabel", "-o=jsonpath={.status.packages}", marketplaceNs) | ||
packageList := strings.Split(packageListOpsrc1, ",") | ||
|
||
//get the packagelist with label of opsrctestlabel | ||
packageListOpsrc2, _ := oc.AsAdmin().WithoutNamespace().Run("get").Args("packagemanifests", "-lopsrc-provider=optestlabel", "-o=name", "-n", marketplaceNs).Output() | ||
for _, packages := range packageList { | ||
o.Expect(packageListOpsrc2).Should(o.ContainSubstring(packages)) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm confused by this last part. I thought the purpose of this test was to check label propogation on marketplace child resources? Why are we checking the packagemanifest here? Or am I misunderstanding the purpose of this test? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This test will check label propogation on marketplace child resources and the packagemanifests from the child "catalogsource" ,The packcagemanifests will alsoo attache the label and they can be filtered by the label. |
||
} | ||
}) | ||
}) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
package marketplace | ||
|
||
import ( | ||
"fmt" | ||
"reflect" | ||
"strings" | ||
|
||
o "github.com/onsi/gomega" | ||
exutil "github.com/openshift/origin/test/extended/util" | ||
|
||
e2e "k8s.io/kubernetes/test/e2e/framework" | ||
) | ||
|
||
//create objects by yaml in the cluster | ||
func createResources(oc *exutil.CLI, yamlfile string) error { | ||
yaml := fmt.Sprint(yamlfile) | ||
e2e.Logf("Start to create Resource: %s", yaml) | ||
err := oc.AsAdmin().WithoutNamespace().Run("create").Args("-f", yaml).Execute() | ||
o.Expect(err).NotTo(o.HaveOccurred()) | ||
if err != nil { | ||
e2e.Failf("Unable to create file:%s", yaml) | ||
return err | ||
} | ||
return nil | ||
} | ||
|
||
// delete objects in the cluster | ||
func clearResources(oc *exutil.CLI, resourcetype string, name string, ns string) error { | ||
msg, err := oc.AsAdmin().WithoutNamespace().Run("delete").Args("-n", ns, resourcetype, name).Output() | ||
if err != nil { | ||
errstring := fmt.Sprintf("%v", msg) | ||
if strings.Contains(errstring, "NotFound") { | ||
return nil | ||
} | ||
return err | ||
} | ||
return nil | ||
} | ||
|
||
//check the resource exist or not | ||
func existResources(oc *exutil.CLI, resourcetype string, name string, ns string) (b bool, e error) { | ||
msg, err := oc.AsAdmin().WithoutNamespace().Run("get").Args("-n", ns, resourcetype, name).Output() | ||
if err != nil { | ||
errstring := fmt.Sprintf("%v", msg) | ||
if strings.Contains(errstring, "NotFound") { | ||
return false, nil | ||
} | ||
|
||
e2e.Failf("Can't get resource:%s", name) | ||
return false, err | ||
} | ||
return true, nil | ||
} | ||
|
||
func isResourceItemsEmpty(resourceList map[string]interface{}) bool { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @emmajiafan Do we still need to use this function? If not, please remove it and other functions which we don't need. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. already remove |
||
// Get resource items and check if it is empty | ||
items, err := resourceList["items"].([]interface{}) | ||
o.Expect(err).To(o.BeTrue(), "Unable to verify items is a slice:%v", items) | ||
|
||
if reflect.ValueOf(items).Len() > 0 { | ||
return false | ||
} else { | ||
return true | ||
} | ||
} | ||
|
||
func getResourceByPath(oc *exutil.CLI, resourcetype string, name string, path string, ns string) (msg string, e error) { | ||
msg, err := oc.AsAdmin().WithoutNamespace().Run("get").Args("-n", ns, resourcetype, name, path).Output() | ||
if err != nil { | ||
errstring := fmt.Sprintf("%v", msg) | ||
if strings.Contains(errstring, "NotFound") { | ||
return msg, nil | ||
} | ||
e2e.Failf("Can't get resource:%s", name) | ||
return msg, err | ||
} | ||
return msg, nil | ||
} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
apiVersion: v1 | ||
kind: Template | ||
metadata: | ||
name: csc-template | ||
objects: | ||
- apiVersion: operators.coreos.com/v1 | ||
kind: CatalogSourceConfig | ||
metadata: | ||
name: "${NAME}" | ||
namespace: "${MARKETPLACE}" | ||
spec: | ||
targetNamespace: "${NAMESPACE}" | ||
source: "" | ||
packages: "${PACKAGES}" | ||
csDisplayName: "${DISPLAYNAME}" | ||
csPublisher: "${PUBLISHER}" | ||
|
||
parameters: | ||
- name: NAME | ||
- name: NAMESPACE | ||
- name: MARKETPLACE | ||
- name: PACKAGES | ||
- name: DISPLAYNAME | ||
- name: PUBLISHER |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
apiVersion: v1 | ||
kind: Template | ||
metadata: | ||
name: opsrc-template | ||
objects: | ||
- apiVersion: operators.coreos.com/v1 | ||
kind: OperatorSource | ||
metadata: | ||
name: "${NAME}" | ||
namespace: "${MARKETPLACE}" | ||
labels: | ||
opsrc-provider: "${LABEL}" | ||
spec: | ||
type: appregistry | ||
endpoint: "https://quay.io/cnr" | ||
registryNamespace: "${NAMESPACE}" | ||
displayName: "${DISPLAYNAME}" | ||
publisher: "${PUBLISHER}" | ||
|
||
parameters: | ||
- name: NAME | ||
- name: NAMESPACE | ||
- name: MARKETPLACE | ||
- name: LABEL | ||
- name: DISPLAYNAME | ||
- name: PUBLISHER |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@emmajiafan It's better to use wait.Poll instead of the Sleep function.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Update to use wait.Poll