blob: 5f37488fda368a4be0a1c32a246adc8c195d0259 [file] [log] [blame]
// Copyright Istio 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 cluster
import (
"testing"
)
import (
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
import (
config2 "github.com/apache/dubbo-go-pixiu/tools/bug-report/pkg/config"
)
func TestShouldSkip(t *testing.T) {
cases := []struct {
name string
pod *v1.Pod
config *config2.BugReportConfig
deployment string
expected bool
}{
{
"tested namespace not skip",
&v1.Pod{
ObjectMeta: metav1.ObjectMeta{
Namespace: "in-namespace1",
},
},
&config2.BugReportConfig{
Include: []*config2.SelectionSpec{
{
Namespaces: []string{"in-"},
},
},
Exclude: []*config2.SelectionSpec{
{
Namespaces: []string{"ex-"},
},
},
},
"*",
false,
},
{
"tested namespace not skip 2",
&v1.Pod{
ObjectMeta: metav1.ObjectMeta{
Namespace: "in-namespace1",
},
},
&config2.BugReportConfig{
Include: []*config2.SelectionSpec{
{
Namespaces: []string{"in*"},
},
},
Exclude: []*config2.SelectionSpec{
{
Namespaces: []string{"ex*"},
},
},
},
"*",
false,
},
{
"tested namespace not skip 3",
&v1.Pod{
ObjectMeta: metav1.ObjectMeta{
Namespace: "in-namespace1",
},
},
&config2.BugReportConfig{
Include: []*config2.SelectionSpec{
{
Namespaces: []string{"*name*"},
},
},
Exclude: []*config2.SelectionSpec{
{
Namespaces: []string{"ex*"},
},
},
},
"*",
false,
},
{
"tested namespace not skip 4",
&v1.Pod{
ObjectMeta: metav1.ObjectMeta{
Namespace: "in-namespace1",
},
},
&config2.BugReportConfig{
Include: []*config2.SelectionSpec{
{
Namespaces: []string{"*space1"},
},
},
Exclude: []*config2.SelectionSpec{
{
Namespaces: []string{"ex*"},
},
},
},
"*",
false,
},
{
"tested namespace skip",
&v1.Pod{
ObjectMeta: metav1.ObjectMeta{
Namespace: "ex-namespace1",
},
},
&config2.BugReportConfig{
Include: []*config2.SelectionSpec{
{
Namespaces: []string{"in-"},
},
},
Exclude: []*config2.SelectionSpec{
{
Namespaces: []string{"ex-"},
},
},
},
"*",
true,
},
{
"tested pod name not skip",
&v1.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "in-pod1",
},
},
&config2.BugReportConfig{
Include: []*config2.SelectionSpec{
{
Pods: []string{"in-"},
},
},
Exclude: []*config2.SelectionSpec{
{
Pods: []string{"ex-"},
},
},
},
"*",
false,
},
{
"tested pod name skip",
&v1.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "ex-pod1",
},
},
&config2.BugReportConfig{
Include: []*config2.SelectionSpec{
{
Pods: []string{"in-"},
},
},
Exclude: []*config2.SelectionSpec{
{
Pods: []string{"ex-"},
},
},
},
"*",
true,
},
{
"tested deployment not skip",
&v1.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "in-test1",
},
},
&config2.BugReportConfig{
Include: []*config2.SelectionSpec{
{
Deployments: []string{"in-"},
},
},
Exclude: []*config2.SelectionSpec{
{
Deployments: []string{"ex-"},
},
},
},
"in-dep1",
false,
},
{
"tested deployment skip",
&v1.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "in-test1",
},
},
&config2.BugReportConfig{
Include: []*config2.SelectionSpec{
{
Pods: []string{"in-"},
Deployments: []string{"in-"},
},
},
Exclude: []*config2.SelectionSpec{
{
Pods: []string{"ex-"},
Deployments: []string{"ex-"},
},
},
},
"ex-dep1",
true,
},
{
"tested container not skip",
&v1.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "in-test1",
},
Spec: v1.PodSpec{
Containers: []v1.Container{
{
Name: "in-con1",
},
},
},
},
&config2.BugReportConfig{
Include: []*config2.SelectionSpec{
{
Pods: []string{"in-"},
Containers: []string{"in-"},
},
},
Exclude: []*config2.SelectionSpec{
{
Pods: []string{"ex-"},
Containers: []string{"ex-"},
},
},
},
"*",
false,
},
{
"tested container skip",
&v1.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "in-test1",
},
Spec: v1.PodSpec{
Containers: []v1.Container{
{
Name: "ex-con1",
},
},
},
},
&config2.BugReportConfig{
Include: []*config2.SelectionSpec{
{
Pods: []string{"in-"},
Containers: []string{"in-"},
},
},
Exclude: []*config2.SelectionSpec{
{
Pods: []string{"ex-"},
Containers: []string{"ex-"},
},
},
},
"*",
true,
},
{
"tested label not skip",
&v1.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "in-test1",
Labels: map[string]string{
"l1": "lv1",
},
Annotations: map[string]string{
"a1": "av1",
"a2": "av1",
},
},
},
&config2.BugReportConfig{
Include: []*config2.SelectionSpec{
{
Pods: []string{"in-"},
Labels: map[string]string{
"l1": "lv1",
"l2": "lv2",
},
},
},
},
"*",
false,
},
{
"tested label skip",
&v1.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "in-test1",
Labels: map[string]string{
"l1": "lv1",
},
Annotations: map[string]string{
"a1": "av1",
"a2": "av1",
},
},
},
&config2.BugReportConfig{
Include: []*config2.SelectionSpec{
{
Pods: []string{"in-"},
Labels: map[string]string{
"l2": "lv2",
},
},
},
},
"*",
true,
},
{
"tested annotation not skip",
&v1.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "in-test1",
Labels: map[string]string{
"l3": "lv3",
"l4": "lv4",
},
Annotations: map[string]string{
"a3": "av3",
"a4": "av4",
},
},
},
&config2.BugReportConfig{
Include: []*config2.SelectionSpec{
{
Pods: []string{"in-"},
Annotations: map[string]string{
"a3": "av3",
"a4": "av4",
},
},
},
},
"*",
false,
},
{
"tested annotation skip",
&v1.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "in-test1",
Labels: map[string]string{
"l3": "lv3",
"l4": "lv4",
},
Annotations: map[string]string{
"a3": "av3",
},
},
},
&config2.BugReportConfig{
Include: []*config2.SelectionSpec{
{
Pods: []string{"in-"},
Annotations: map[string]string{
"a4": "av4",
},
},
},
},
"*",
true,
},
}
for _, c := range cases {
t.Run(c.name, func(t *testing.T) {
skip := shouldSkip(c.deployment, c.config, c.pod)
if skip != c.expected {
t.Errorf("shouldSkip() for test case name [%s] return= %v, want %v", c.name, skip, c.expected)
}
})
}
}