Skip to content
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

Merged
merged 9 commits into from
Nov 26, 2019
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions test/extended/include.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ import (
_ "github.com/openshift/origin/test/extended/jobs"
_ "github.com/openshift/origin/test/extended/localquota"
_ "github.com/openshift/origin/test/extended/machines"
_ "github.com/openshift/origin/test/extended/marketplace"
_ "github.com/openshift/origin/test/extended/networking"
_ "github.com/openshift/origin/test/extended/oauth"
_ "github.com/openshift/origin/test/extended/operators"
Expand Down
94 changes: 94 additions & 0 deletions test/extended/marketplace/marketplace_lables.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
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"

//buildPruningBaseDir = exutil.FixturePath("testdata", "marketplace")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this commented out code be removed?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will remove

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 := exutil.FixturePath("testdata", "marketplace", "opsrc", "02-opsrc.yaml")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same question about commented code

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will remove

opsrcYaml, err := oc.AsAdmin().Run("process").Args("--ignore-unknown-parameters=true", "-f", opsrcYamltem, "-p", "NAME=opsrctestlabel", "NAMESPACE=jfan", "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)
Copy link
Contributor

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.

Copy link
Contributor Author

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


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)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here, the same as the above.

Copy link
Contributor Author

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


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))
Copy link
Member

Choose a reason for hiding this comment

The 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?

Copy link
Contributor Author

Choose a reason for hiding this comment

The 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.

}
})
})
78 changes: 78 additions & 0 deletions test/extended/marketplace/marketplace_utils.go
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 {
Copy link
Contributor

Choose a reason for hiding this comment

The 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.

Copy link
Contributor Author

Choose a reason for hiding this comment

The 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
}
94 changes: 94 additions & 0 deletions test/extended/testdata/bindata.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 24 additions & 0 deletions test/extended/testdata/marketplace/csc/02-csc.yaml
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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs a newline at the end of the file.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will add

26 changes: 26 additions & 0 deletions test/extended/testdata/marketplace/opsrc/02-opsrc.yaml
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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This also needs a newline at the end of the file.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will add