istio

Форк
0
119 строк · 3.5 Кб
1
// Copyright Istio Authors
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
//     http://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14

15
package serviceentry
16

17
import (
18
	"reflect"
19
	"testing"
20

21
	"k8s.io/apimachinery/pkg/types"
22

23
	networking "istio.io/api/networking/v1alpha3"
24
	"istio.io/istio/pkg/config"
25
	"istio.io/istio/pkg/config/schema/gvk"
26
)
27

28
func TestGetWorkloadServiceEntries(t *testing.T) {
29
	se1 := config.Config{
30
		Meta: config.Meta{GroupVersionKind: gvk.ServiceEntry, Namespace: "default", Name: "se-1"},
31
		Spec: &networking.ServiceEntry{
32
			Hosts: []string{"*.google.com"},
33
			Ports: []*networking.ServicePort{
34
				{Number: 80, Name: "http-number", Protocol: "http"},
35
				{Number: 8080, Name: "http2-number", Protocol: "http2"},
36
			},
37
			WorkloadSelector: &networking.WorkloadSelector{
38
				Labels: map[string]string{"app": "foo"},
39
			},
40
		},
41
	}
42
	se2 := config.Config{
43
		Meta: config.Meta{GroupVersionKind: gvk.ServiceEntry, Namespace: "default", Name: "se-2"},
44
		Spec: &networking.ServiceEntry{
45
			Hosts: []string{"*.google.com"},
46
			Ports: []*networking.ServicePort{
47
				{Number: 80, Name: "http-number", Protocol: "http"},
48
				{Number: 8080, Name: "http2-number", Protocol: "http2"},
49
			},
50
			WorkloadSelector: &networking.WorkloadSelector{
51
				Labels: map[string]string{"app": "bar"},
52
			},
53
		},
54
	}
55

56
	se3 := config.Config{
57
		Meta: config.Meta{GroupVersionKind: gvk.ServiceEntry, Namespace: "default", Name: "se-3"},
58
		Spec: &networking.ServiceEntry{
59
			Hosts: []string{"www.wikipedia.org"},
60
			Ports: []*networking.ServicePort{
61
				{Number: 80, Name: "http-number", Protocol: "http"},
62
				{Number: 8080, Name: "http2-number", Protocol: "http2"},
63
			},
64
			WorkloadSelector: &networking.WorkloadSelector{
65
				Labels: map[string]string{"app": "foo"},
66
			},
67
		},
68
	}
69
	ses := []config.Config{se1, se2, se3}
70

71
	wle := &networking.WorkloadEntry{
72
		Address: "2.3.4.5",
73
		Labels: map[string]string{
74
			"app":     "foo",
75
			"version": "v1",
76
		},
77
		Ports: map[string]uint32{
78
			"http-number":  8081,
79
			"http2-number": 8088,
80
		},
81
	}
82

83
	expected := map[types.NamespacedName]*config.Config{
84
		{Namespace: "default", Name: "se-1"}: &se1,
85
		{Namespace: "default", Name: "se-3"}: &se3,
86
	}
87
	got := getWorkloadServiceEntries(ses, wle)
88
	if !reflect.DeepEqual(got, expected) {
89
		t.Errorf("recv unexpected se: %v", got)
90
	}
91
}
92

93
func TestCompareServiceEntries(t *testing.T) {
94
	oldSes := map[types.NamespacedName]*config.Config{
95
		{Namespace: "default", Name: "se-1"}: {},
96
		{Namespace: "default", Name: "se-2"}: {},
97
		{Namespace: "default", Name: "se-3"}: {},
98
	}
99
	currSes := map[types.NamespacedName]*config.Config{
100
		{Namespace: "default", Name: "se-2"}: {},
101
		{Namespace: "default", Name: "se-4"}: {},
102
		{Namespace: "default", Name: "se-5"}: {},
103
	}
104

105
	expectedUnselected := map[types.NamespacedName]*config.Config{
106
		{Namespace: "default", Name: "se-1"}: {},
107
		{Namespace: "default", Name: "se-3"}: {},
108
	}
109
	unSelected := difference(oldSes, currSes)
110

111
	if len(unSelected) != len(expectedUnselected) {
112
		t.Errorf("got unexpected unSelected ses %v", unSelected)
113
	}
114
	for _, se := range unSelected {
115
		if _, ok := expectedUnselected[se]; !ok {
116
			t.Errorf("got unexpected unSelected se %v", se)
117
		}
118
	}
119
}
120

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.