mirror of
https://github.com/kubevela/kubevela.git
synced 2026-02-14 18:10:21 +00:00
* Create testwr
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Co-authored-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* Update testwr
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Co-authored-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* Update testwr
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Co-authored-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* Update testwr
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Co-authored-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* Update testwr
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Co-authored-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* Update testwr
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Co-authored-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* Update testwr
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Co-authored-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* Update testwr
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Co-authored-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* Delete testwr
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Co-authored-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* Chore: (deps): Bump goreleaser/goreleaser-action from 5.0.0 to 6.3.0 (#6775)
Bumps [goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action) from 5.0.0 to 6.3.0.
- [Release notes](https://github.com/goreleaser/goreleaser-action/releases)
- [Commits](7ec5c2b0c6...9c156ee8a1)
---
updated-dependencies:
- dependency-name: goreleaser/goreleaser-action
dependency-version: 6.3.0
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* Chore: Replace the openssf badge with UI link (#6783)
[optional body]
[optional footer]
Signed-off-by: Anoop Gopalakrishnan <anoop2811@aol.in>
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Co-authored-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* chore: moves dockerhub user name to secret section in the reusable workflow (#6778)
Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
Signed-off-by: Ayush <ayushshyam.official.888@gmail.com>
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Co-authored-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* Chore: update helm repo path in tests (#6797)
* chore: fixes the breaking tests with older helm chart address
Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
Co-authored-by: Amit Singh <singhamitch@outlook.com>
Co-authored-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
* tests: update the registery url
Signed-off-by: semmet95 <singhamitch@outlook.com>
* updates the default url
Signed-off-by: semmet95 <singhamitch@outlook.com>
* test: reverts the changes
Signed-off-by: semmet95 <singhamitch@outlook.com>
* fix: sets github repo directory as the default definition registry
Signed-off-by: Amit Singh <singhamitch@outlook.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
* chore: reverts the default definition registry url
Signed-off-by: Amit Singh <singhamitch@outlook.com>
* test: overwrites custom definition registry url
Signed-off-by: Amit Singh <singhamitch@outlook.com>
* debugging test failure
Signed-off-by: Amit Singh <singhamitch@outlook.com>
---------
Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
Signed-off-by: Amit Singh <singhamitch@outlook.com>
Co-authored-by: Amit Singh <singhamitch@outlook.com>
Co-authored-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* Fix: moves resource modification inside patch block (#6791)
* fix: moves resource modification inside patch block
Signed-off-by: Ayush Shyam Kumar <ayushshyam.official.888@gmail.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
* chore: adds changes from make-reviewable
Signed-off-by: Ayush Shyam Kumar <ayushshyam.official.888@gmail.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
* debugging error
Signed-off-by: Ayush Shyam Kumar <ayushshyam.official.888@gmail.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
* test: updates the helm outdated path to new one
Signed-off-by: Amit Singh <singhamitch@outlook.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
* tests: fixes the failing helm test case
Signed-off-by: semmet95 <singhamitch@outlook.com>
* removes debugging printing statements
Signed-off-by: Amit Singh <singhamitch@outlook.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
---------
Signed-off-by: Ayush Shyam Kumar <ayushshyam.official.888@gmail.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
Signed-off-by: Amit Singh <singhamitch@outlook.com>
Co-authored-by: Ayush <ayushshyam.official.888@gmail.com>
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* Chore: switches to new oapi type field type (#6794)
* chore: switches to new oapi type field type
Signed-off-by: Amit Singh <singhamitch@outlook.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
* chore: updates gen_sdk to use the new schema type
Signed-off-by: Amit Singh <singhamitch@outlook.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
* chore: updates gen_sdk_test to use the new schema type
Signed-off-by: Amit Singh <singhamitch@outlook.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
* chore: updates schema to use the new schema type
Signed-off-by: Amit Singh <singhamitch@outlook.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
* fix: updates chart urls
Signed-off-by: Amit Singh <singhamitch@outlook.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
* chore: changes from make reviewable
Signed-off-by: Amit Singh <singhamitch@outlook.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
* chore: fixes linting errors
Signed-off-by: Amit Singh <singhamitch@outlook.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
* debugging test failure
Signed-off-by: Amit Singh <singhamitch@outlook.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
* fix: fixes schema type nil check
Signed-off-by: Amit Singh <singhamitch@outlook.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
* chore: replaces literals with constants
Signed-off-by: Amit Singh <singhamitch@outlook.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
* debugging test failure
Signed-off-by: Amit Singh <singhamitch@outlook.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
* test: switches to the new addon registry url
Signed-off-by: Amit Singh <singhamitch@outlook.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
* chore: extra line removal
Signed-off-by: Amit Singh <singhamitch@outlook.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
* fix: replaces deprecated urls
Signed-off-by: Amit Singh <singhamitch@outlook.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
* fix: removes extra quotes form marshaljson
Signed-off-by: Amit Singh <singhamitch@outlook.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
* fix: updates chart url in mock resource
Signed-off-by: Amit Singh <singhamitch@outlook.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
---------
Signed-off-by: Amit Singh <singhamitch@outlook.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
Co-authored-by: Vishal Kumar <vishal210893@gmail.com>
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* Fix: vela cli namespace behaviour (#6805)
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Co-authored-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* Fix: vela up command to behave similarly with kubectl (#6809)
* Fix: vela up command to behave similarly with kubectl
Signed-off-by: Chaitanya Reddy Onteddu <chaitanyareddy0702@gmail.com>
* Chore: Update the unit test cases and add a new test cases
Signed-off-by: Chaitanya Reddy Onteddu <chaitanyareddy0702@gmail.com>
---------
Signed-off-by: Chaitanya Reddy Onteddu <chaitanyareddy0702@gmail.com>
Co-authored-by: Chaitanya Reddy Onteddu <co@guidewire.com>
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* Fix: check component status after initial deployment (#6824)
* fix: check component status after initial deployment
Signed-off-by: Brian Kane <briankane1@gmail.com>
* Fix: applications should correctly reflect component health throughout the apps lifecycle
Signed-off-by: Brian Kane <briankane1@gmail.com>
* Fix: check component status after initial deployment
Signed-off-by: Brian Kane <briankane1@gmail.com>
---------
Signed-off-by: Brian Kane <briankane1@gmail.com>
Co-authored-by: Mikhail Elenskii <elenskii-mikhail@outlook.com>
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* chore: upgrade k8s version to v0.31.10 and corresponding fixes
Signed-off-by: vishal210893 <vishal210893@gmail.com>
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Co-authored-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* fix: remove defer from feature gate testing in multiple test files
Signed-off-by: vishal210893 <vishal210893@gmail.com>
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Co-authored-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* fix: remove defer from feature gate testing in multiple test files
Signed-off-by: vishal210893 <vishal210893@gmail.com>
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Co-authored-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* fix: use RunPortForwardContext for improved context handling in port forwarding
Signed-off-by: vishal210893 <vishal210893@gmail.com>
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Co-authored-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* Chore: Fix check-diff
Signed-off-by: Chaitanya Reddy Onteddu <co@guidewire.com>
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Co-authored-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* Chore: Update ENVTEST_K8S_VERSION variable
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Co-authored-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* fix: update feature gate testing to use GinkgoT for improved context handling
Co-authored-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* Fix: update Kubernetes version in e2e tests to v1.31
Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
Co-authored-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Co-authored-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* Fix: increase timeout for application revision retrieval in multicluster tests
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Co-authored-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* chore: update kubevela workflow to master
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* Fix: increase timeout in multicluster tests
Signed-off-by: Vishal Kumar <vishal210893@gmail.com>
* fix: upgrade dependencies and improve context handling in port forwarding
Signed-off-by: vishal210893 <vishal210893@gmail.com>
* chore: remove space to trigger pipeline
Signed-off-by: vishal210893 <vishal210893@gmail.com>
* chore: add space to trigger pipeline
Signed-off-by: vishal210893 <vishal210893@gmail.com>
* chore: updated go sum
Signed-off-by: vishal210893 <vishal210893@gmail.com>
* chore: updated go.mod for running github action
Signed-off-by: vishal210893 <vishal210893@gmail.com>
* chore: updated go.mod for running github action
Signed-off-by: vishal210893 <vishal210893@gmail.com>
* Fix: increase timeout and enhanced multicluster tests
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* adding a comment to re run the pipeline
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* Adding back decription removed during check-diff
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* ran make reviewable
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* replaced generate-groups.sh with kube_codegen.sh
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* API Call changes for kube_codegen
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* fixed incorrect Api package path format and output dir handling
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* resolved incompatible dependencies issue
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
* chore: update clientgen.sh to use kubevela clientgen_work_temp
Signed-off-by: Reetika Malhotra <malhotra.reetika25@gmail.com>
* chore: update clientgen.sh to use kubevela clientgen_work_temp
Signed-off-by: Reetika Malhotra <malhotra.reetika25@gmail.com>
* test: increase timeout for application deployment and rollback verification
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
---------
Signed-off-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Anoop Gopalakrishnan <anoop2811@aol.in>
Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
Signed-off-by: Ayush <ayushshyam.official.888@gmail.com>
Signed-off-by: semmet95 <singhamitch@outlook.com>
Signed-off-by: Amit Singh <singhamitch@outlook.com>
Signed-off-by: Ayush Shyam Kumar <ayushshyam.official.888@gmail.com>
Signed-off-by: Chaitanya Reddy Onteddu <chaitanyareddy0702@gmail.com>
Signed-off-by: Brian Kane <briankane1@gmail.com>
Signed-off-by: vishal210893 <vishal210893@gmail.com>
Signed-off-by: Chaitanya Reddy Onteddu <co@guidewire.com>
Signed-off-by: Vishal Kumar <vishal210893@gmail.com>
Signed-off-by: Reetika Malhotra <malhotra.reetika25@gmail.com>
Co-authored-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
Co-authored-by: Vaibhav Agrawal <vaibhav.agrawal0096@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anoop Gopalakrishnan <2038273+anoop2811@users.noreply.github.com>
Co-authored-by: Ayush Kumar <65535504+roguepikachu@users.noreply.github.com>
Co-authored-by: Amit Singh <singhamitch@outlook.com>
Co-authored-by: Ayush <ayushshyam.official.888@gmail.com>
Co-authored-by: Chaitanyareddy0702 <78363486+Chaitanyareddy0702@users.noreply.github.com>
Co-authored-by: Chaitanya Reddy Onteddu <co@guidewire.com>
Co-authored-by: Brian Kane <briankane1@gmail.com>
Co-authored-by: Mikhail Elenskii <elenskii-mikhail@outlook.com>
Co-authored-by: Chaitanya Reddy Onteddu <chaitanyareddy0702@gmail.com>
Co-authored-by: Reetika Malhotra <malhotra.reetika25@gmail.com>
382 lines
14 KiB
Go
382 lines
14 KiB
Go
/*
|
|
Copyright 2021 The KubeVela Authors.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package component
|
|
|
|
import (
|
|
"context"
|
|
"math/rand"
|
|
"testing"
|
|
"time"
|
|
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
corev1 "k8s.io/api/core/v1"
|
|
rbacv1 "k8s.io/api/rbac/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
|
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
|
"k8s.io/client-go/rest"
|
|
featuregatetesting "k8s.io/component-base/featuregate/testing"
|
|
"k8s.io/utils/ptr"
|
|
"sigs.k8s.io/controller-runtime/pkg/client"
|
|
"sigs.k8s.io/controller-runtime/pkg/envtest"
|
|
|
|
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1alpha1"
|
|
"github.com/oam-dev/kubevela/pkg/features"
|
|
pkgcommon "github.com/oam-dev/kubevela/pkg/utils/common"
|
|
)
|
|
|
|
var cfg *rest.Config
|
|
var k8sClient client.Client
|
|
var testEnv *envtest.Environment
|
|
|
|
func TestUtils(t *testing.T) {
|
|
RegisterFailHandler(Fail)
|
|
RunSpecs(t, "Utils Suite")
|
|
}
|
|
|
|
var _ = BeforeSuite(func() {
|
|
rand.Seed(time.Now().UnixNano())
|
|
By("bootstrapping test environment for utils test")
|
|
|
|
testEnv = &envtest.Environment{
|
|
ControlPlaneStartTimeout: time.Minute * 3,
|
|
ControlPlaneStopTimeout: time.Minute,
|
|
UseExistingCluster: ptr.To(false),
|
|
CRDDirectoryPaths: []string{"./testdata"},
|
|
}
|
|
|
|
By("start kube test env")
|
|
var err error
|
|
cfg, err = testEnv.Start()
|
|
Expect(err).ShouldNot(HaveOccurred())
|
|
Expect(cfg).ToNot(BeNil())
|
|
|
|
By("new kube client")
|
|
cfg.Timeout = time.Minute * 2
|
|
k8sClient, err = client.New(cfg, client.Options{Scheme: pkgcommon.Scheme})
|
|
Expect(err).Should(Succeed())
|
|
})
|
|
|
|
var _ = AfterSuite(func() {
|
|
By("tearing down the test environment")
|
|
err := testEnv.Stop()
|
|
Expect(err).ToNot(HaveOccurred())
|
|
})
|
|
|
|
var _ = Describe("Test ref-objects functions", func() {
|
|
It("Test SelectRefObjectsForDispatch", func() {
|
|
featuregatetesting.SetFeatureGateDuringTest(GinkgoT(), utilfeature.DefaultFeatureGate, features.LegacyObjectTypeIdentifier, true)
|
|
featuregatetesting.SetFeatureGateDuringTest(GinkgoT(), utilfeature.DefaultFeatureGate, features.DeprecatedObjectLabelSelector, true)
|
|
By("Create objects")
|
|
Expect(k8sClient.Create(context.Background(), &corev1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: "test"}})).Should(Succeed())
|
|
for _, obj := range []client.Object{&corev1.ConfigMap{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "dynamic",
|
|
Namespace: "test",
|
|
},
|
|
}, &corev1.Service{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "dynamic",
|
|
Namespace: "test",
|
|
Generation: int64(5),
|
|
},
|
|
Spec: corev1.ServiceSpec{
|
|
ClusterIP: "10.0.0.254",
|
|
Ports: []corev1.ServicePort{{Port: 80}},
|
|
},
|
|
}, &corev1.ConfigMap{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "by-label-1",
|
|
Namespace: "test",
|
|
Labels: map[string]string{"key": "value"},
|
|
},
|
|
}, &corev1.ConfigMap{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "by-label-2",
|
|
Namespace: "test",
|
|
Labels: map[string]string{"key": "value"},
|
|
},
|
|
}, &rbacv1.ClusterRole{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "test-cluster-role",
|
|
},
|
|
}} {
|
|
Expect(k8sClient.Create(context.Background(), obj)).Should(Succeed())
|
|
}
|
|
createUnstructured := func(apiVersion string, kind string, name string, namespace string, labels map[string]interface{}) *unstructured.Unstructured {
|
|
un := &unstructured.Unstructured{
|
|
Object: map[string]interface{}{
|
|
"apiVersion": apiVersion,
|
|
"kind": kind,
|
|
"metadata": map[string]interface{}{"name": name},
|
|
},
|
|
}
|
|
if namespace != "" {
|
|
un.SetNamespace(namespace)
|
|
}
|
|
if labels != nil {
|
|
un.Object["metadata"].(map[string]interface{})["labels"] = labels
|
|
}
|
|
return un
|
|
}
|
|
testcases := map[string]struct {
|
|
Input v1alpha1.ObjectReferrer
|
|
compName string
|
|
appNs string
|
|
Output []*unstructured.Unstructured
|
|
Error string
|
|
Scope string
|
|
IsService bool
|
|
IsClusterRole bool
|
|
}{
|
|
"normal": {
|
|
Input: v1alpha1.ObjectReferrer{
|
|
ObjectTypeIdentifier: v1alpha1.ObjectTypeIdentifier{Resource: "configmap"},
|
|
ObjectSelector: v1alpha1.ObjectSelector{Name: "dynamic"},
|
|
},
|
|
appNs: "test",
|
|
Output: []*unstructured.Unstructured{createUnstructured("v1", "ConfigMap", "dynamic", "test", nil)},
|
|
},
|
|
"legacy-type-identifier": {
|
|
Input: v1alpha1.ObjectReferrer{
|
|
ObjectTypeIdentifier: v1alpha1.ObjectTypeIdentifier{LegacyObjectTypeIdentifier: v1alpha1.LegacyObjectTypeIdentifier{Kind: "ConfigMap", APIVersion: "v1"}},
|
|
ObjectSelector: v1alpha1.ObjectSelector{Name: "dynamic"},
|
|
},
|
|
appNs: "test",
|
|
Output: []*unstructured.Unstructured{createUnstructured("v1", "ConfigMap", "dynamic", "test", nil)},
|
|
},
|
|
"invalid-apiVersion": {
|
|
Input: v1alpha1.ObjectReferrer{
|
|
ObjectTypeIdentifier: v1alpha1.ObjectTypeIdentifier{LegacyObjectTypeIdentifier: v1alpha1.LegacyObjectTypeIdentifier{Kind: "ConfigMap", APIVersion: "a/b/v1"}},
|
|
ObjectSelector: v1alpha1.ObjectSelector{Name: "dynamic"},
|
|
},
|
|
appNs: "test",
|
|
Error: "invalid APIVersion",
|
|
},
|
|
"invalid-type-identifier": {
|
|
Input: v1alpha1.ObjectReferrer{
|
|
ObjectTypeIdentifier: v1alpha1.ObjectTypeIdentifier{},
|
|
ObjectSelector: v1alpha1.ObjectSelector{Name: "dynamic"},
|
|
},
|
|
appNs: "test",
|
|
Error: "neither resource or apiVersion/kind is set",
|
|
},
|
|
"name-and-selector-both-set": {
|
|
Input: v1alpha1.ObjectReferrer{ObjectSelector: v1alpha1.ObjectSelector{Name: "dynamic", LabelSelector: map[string]string{"key": "value"}}},
|
|
appNs: "test",
|
|
Error: "invalid object selector for ref-objects, name and labelSelector cannot be both set",
|
|
},
|
|
"empty-ref-object-name": {
|
|
Input: v1alpha1.ObjectReferrer{ObjectTypeIdentifier: v1alpha1.ObjectTypeIdentifier{Resource: "configmap"}},
|
|
compName: "dynamic",
|
|
appNs: "test",
|
|
Output: []*unstructured.Unstructured{createUnstructured("v1", "ConfigMap", "dynamic", "test", nil)},
|
|
},
|
|
"cannot-find-ref-object": {
|
|
Input: v1alpha1.ObjectReferrer{
|
|
ObjectTypeIdentifier: v1alpha1.ObjectTypeIdentifier{Resource: "configmap"},
|
|
ObjectSelector: v1alpha1.ObjectSelector{Name: "static"},
|
|
},
|
|
appNs: "test",
|
|
Error: "failed to load ref object",
|
|
},
|
|
"modify-service": {
|
|
Input: v1alpha1.ObjectReferrer{
|
|
ObjectTypeIdentifier: v1alpha1.ObjectTypeIdentifier{Resource: "service"},
|
|
ObjectSelector: v1alpha1.ObjectSelector{Name: "dynamic"},
|
|
},
|
|
appNs: "test",
|
|
IsService: true,
|
|
},
|
|
"by-labels": {
|
|
Input: v1alpha1.ObjectReferrer{
|
|
ObjectTypeIdentifier: v1alpha1.ObjectTypeIdentifier{Resource: "configmap"},
|
|
ObjectSelector: v1alpha1.ObjectSelector{LabelSelector: map[string]string{"key": "value"}},
|
|
},
|
|
appNs: "test",
|
|
Output: []*unstructured.Unstructured{
|
|
createUnstructured("v1", "ConfigMap", "by-label-1", "test", map[string]interface{}{"key": "value"}),
|
|
createUnstructured("v1", "ConfigMap", "by-label-2", "test", map[string]interface{}{"key": "value"}),
|
|
},
|
|
},
|
|
"by-deprecated-labels": {
|
|
Input: v1alpha1.ObjectReferrer{
|
|
ObjectTypeIdentifier: v1alpha1.ObjectTypeIdentifier{Resource: "configmap"},
|
|
ObjectSelector: v1alpha1.ObjectSelector{DeprecatedLabelSelector: map[string]string{"key": "value"}},
|
|
},
|
|
appNs: "test",
|
|
Output: []*unstructured.Unstructured{
|
|
createUnstructured("v1", "ConfigMap", "by-label-1", "test", map[string]interface{}{"key": "value"}),
|
|
createUnstructured("v1", "ConfigMap", "by-label-2", "test", map[string]interface{}{"key": "value"}),
|
|
},
|
|
},
|
|
"no-kind-for-resource": {
|
|
Input: v1alpha1.ObjectReferrer{ObjectTypeIdentifier: v1alpha1.ObjectTypeIdentifier{Resource: "unknown"}},
|
|
appNs: "test",
|
|
Error: "no matches",
|
|
},
|
|
"cross-namespace": {
|
|
Input: v1alpha1.ObjectReferrer{
|
|
ObjectTypeIdentifier: v1alpha1.ObjectTypeIdentifier{Resource: "configmap"},
|
|
ObjectSelector: v1alpha1.ObjectSelector{Name: "dynamic", Namespace: "test"},
|
|
},
|
|
appNs: "demo",
|
|
Output: []*unstructured.Unstructured{createUnstructured("v1", "ConfigMap", "dynamic", "test", nil)},
|
|
},
|
|
"cross-namespace-forbidden": {
|
|
Input: v1alpha1.ObjectReferrer{
|
|
ObjectTypeIdentifier: v1alpha1.ObjectTypeIdentifier{Resource: "configmap"},
|
|
ObjectSelector: v1alpha1.ObjectSelector{Name: "dynamic", Namespace: "test"},
|
|
},
|
|
appNs: "demo",
|
|
Scope: RefObjectsAvailableScopeNamespace,
|
|
Error: "cannot refer to objects outside the application's namespace",
|
|
},
|
|
"cross-cluster": {
|
|
Input: v1alpha1.ObjectReferrer{
|
|
ObjectTypeIdentifier: v1alpha1.ObjectTypeIdentifier{Resource: "configmap"},
|
|
ObjectSelector: v1alpha1.ObjectSelector{Name: "dynamic", Cluster: "demo"},
|
|
},
|
|
appNs: "test",
|
|
Output: []*unstructured.Unstructured{createUnstructured("v1", "ConfigMap", "dynamic", "test", nil)},
|
|
},
|
|
"cross-cluster-forbidden": {
|
|
Input: v1alpha1.ObjectReferrer{
|
|
ObjectTypeIdentifier: v1alpha1.ObjectTypeIdentifier{Resource: "configmap"},
|
|
ObjectSelector: v1alpha1.ObjectSelector{Name: "dynamic", Cluster: "demo"},
|
|
},
|
|
appNs: "test",
|
|
Scope: RefObjectsAvailableScopeCluster,
|
|
Error: "cannot refer to objects outside control plane",
|
|
},
|
|
"test-cluster-scope-resource": {
|
|
Input: v1alpha1.ObjectReferrer{
|
|
ObjectTypeIdentifier: v1alpha1.ObjectTypeIdentifier{Resource: "clusterrole"},
|
|
ObjectSelector: v1alpha1.ObjectSelector{Name: "test-cluster-role"},
|
|
},
|
|
appNs: "test",
|
|
Scope: RefObjectsAvailableScopeCluster,
|
|
Output: []*unstructured.Unstructured{createUnstructured("rbac.authorization.k8s.io/v1", "ClusterRole", "test-cluster-role", "", nil)},
|
|
IsClusterRole: true,
|
|
},
|
|
}
|
|
for name, tt := range testcases {
|
|
By("Test " + name)
|
|
if tt.Scope == "" {
|
|
tt.Scope = RefObjectsAvailableScopeGlobal
|
|
}
|
|
RefObjectsAvailableScope = tt.Scope
|
|
output, err := SelectRefObjectsForDispatch(context.Background(), k8sClient, tt.appNs, tt.compName, tt.Input)
|
|
if tt.Error != "" {
|
|
Expect(err).ShouldNot(BeNil())
|
|
Expect(err.Error()).Should(ContainSubstring(tt.Error))
|
|
} else {
|
|
Expect(err).Should(Succeed())
|
|
if tt.IsService {
|
|
Expect(output[0].Object["kind"]).Should(Equal("Service"))
|
|
Expect(output[0].Object["spec"].(map[string]interface{})["clusterIP"]).Should(BeNil())
|
|
} else {
|
|
if tt.IsClusterRole {
|
|
delete(output[0].Object, "rules")
|
|
}
|
|
Expect(output).Should(Equal(tt.Output))
|
|
}
|
|
}
|
|
}
|
|
})
|
|
|
|
It("Test AppendUnstructuredObjects", func() {
|
|
testCases := map[string]struct {
|
|
Inputs []*unstructured.Unstructured
|
|
Input *unstructured.Unstructured
|
|
Outputs []*unstructured.Unstructured
|
|
}{
|
|
"overlap": {
|
|
Inputs: []*unstructured.Unstructured{{Object: map[string]interface{}{
|
|
"apiVersion": "v1",
|
|
"kind": "ConfigMap",
|
|
"metadata": map[string]interface{}{"name": "x", "namespace": "default"},
|
|
"data": "a",
|
|
}}, {Object: map[string]interface{}{
|
|
"apiVersion": "v1",
|
|
"kind": "ConfigMap",
|
|
"metadata": map[string]interface{}{"name": "y", "namespace": "default"},
|
|
"data": "b",
|
|
}}},
|
|
Input: &unstructured.Unstructured{Object: map[string]interface{}{
|
|
"apiVersion": "v1",
|
|
"kind": "ConfigMap",
|
|
"metadata": map[string]interface{}{"name": "y", "namespace": "default"},
|
|
"data": "c",
|
|
}},
|
|
Outputs: []*unstructured.Unstructured{{Object: map[string]interface{}{
|
|
"apiVersion": "v1",
|
|
"kind": "ConfigMap",
|
|
"metadata": map[string]interface{}{"name": "x", "namespace": "default"},
|
|
"data": "a",
|
|
}}, {Object: map[string]interface{}{
|
|
"apiVersion": "v1",
|
|
"kind": "ConfigMap",
|
|
"metadata": map[string]interface{}{"name": "y", "namespace": "default"},
|
|
"data": "c",
|
|
}}},
|
|
},
|
|
"append": {
|
|
Inputs: []*unstructured.Unstructured{{Object: map[string]interface{}{
|
|
"apiVersion": "v1",
|
|
"kind": "ConfigMap",
|
|
"metadata": map[string]interface{}{"name": "x", "namespace": "default"},
|
|
"data": "a",
|
|
}}, {Object: map[string]interface{}{
|
|
"apiVersion": "v1",
|
|
"kind": "ConfigMap",
|
|
"metadata": map[string]interface{}{"name": "y", "namespace": "default"},
|
|
"data": "b",
|
|
}}},
|
|
Input: &unstructured.Unstructured{Object: map[string]interface{}{
|
|
"apiVersion": "v1",
|
|
"kind": "ConfigMap",
|
|
"metadata": map[string]interface{}{"name": "z", "namespace": "default"},
|
|
"data": "c",
|
|
}},
|
|
Outputs: []*unstructured.Unstructured{{Object: map[string]interface{}{
|
|
"apiVersion": "v1",
|
|
"kind": "ConfigMap",
|
|
"metadata": map[string]interface{}{"name": "x", "namespace": "default"},
|
|
"data": "a",
|
|
}}, {Object: map[string]interface{}{
|
|
"apiVersion": "v1",
|
|
"kind": "ConfigMap",
|
|
"metadata": map[string]interface{}{"name": "y", "namespace": "default"},
|
|
"data": "b",
|
|
}}, {Object: map[string]interface{}{
|
|
"apiVersion": "v1",
|
|
"kind": "ConfigMap",
|
|
"metadata": map[string]interface{}{"name": "z", "namespace": "default"},
|
|
"data": "c",
|
|
}}},
|
|
},
|
|
}
|
|
for name, tt := range testCases {
|
|
By("Test " + name)
|
|
Expect(AppendUnstructuredObjects(tt.Inputs, tt.Input)).Should(Equal(tt.Outputs))
|
|
}
|
|
})
|
|
|
|
})
|