istio

Форк
0
/
default_watcher_test.go 
115 строк · 3.2 Кб
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 revisions
16

17
import (
18
	"fmt"
19
	"testing"
20
	"time"
21

22
	v1 "k8s.io/api/admissionregistration/v1"
23
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
24

25
	"istio.io/api/label"
26
	"istio.io/istio/pkg/kube"
27
	"istio.io/istio/pkg/kube/kclient/clienttest"
28
	"istio.io/istio/pkg/test"
29
	"istio.io/istio/pkg/test/util/retry"
30
)
31

32
func webhook(revision string) *v1.MutatingWebhookConfiguration {
33
	return &v1.MutatingWebhookConfiguration{
34
		TypeMeta: metav1.TypeMeta{},
35
		ObjectMeta: metav1.ObjectMeta{
36
			Name: defaultTagWebhookName,
37
			Labels: map[string]string{
38
				label.IoIstioRev.Name: revision,
39
			},
40
		},
41
	}
42
}
43

44
func expectRevision(t test.Failer, watcher DefaultWatcher, expected string) {
45
	t.Helper()
46
	retry.UntilSuccessOrFail(t, func() error {
47
		got := watcher.GetDefault()
48
		if got != expected {
49
			return fmt.Errorf("wanted default revision %q, got %q", expected, got)
50
		}
51
		return nil
52
	}, retry.Timeout(time.Second*10), retry.BackoffDelay(time.Millisecond*10))
53
}
54

55
func expectRevisionChan(t test.Failer, revisionChan chan string, expected string) {
56
	select {
57
	case rev := <-revisionChan:
58
		if rev != expected {
59
			t.Fatalf("expected revision %q to be produced on chan, got %q", expected, rev)
60
		}
61
	case <-time.After(time.Second * 5):
62
		t.Fatalf("timed out waiting for value on default revision chan")
63
	}
64
}
65

66
func TestNoDefaultRevision(t *testing.T) {
67
	stop := make(chan struct{})
68
	client := kube.NewFakeClient()
69
	w := NewDefaultWatcher(client, "default")
70
	client.RunAndWait(stop)
71
	go w.Run(stop)
72
	// if have no default tag for some reason, should return ""
73
	expectRevision(t, w, "")
74
	close(stop)
75
}
76

77
func TestDefaultRevisionChanges(t *testing.T) {
78
	stop := test.NewStop(t)
79
	client := kube.NewFakeClient()
80
	w := NewDefaultWatcher(client, "default").(*defaultWatcher)
81
	client.RunAndWait(stop)
82
	go w.Run(stop)
83
	whc := clienttest.Wrap(t, w.webhooks)
84
	expectRevision(t, w, "")
85
	// change default to "red"
86
	whc.CreateOrUpdate(webhook("red"))
87
	expectRevision(t, w, "red")
88

89
	// change default to "green"
90
	whc.CreateOrUpdate(webhook("green"))
91
	expectRevision(t, w, "green")
92

93
	// remove default
94
	whc.Delete(defaultTagWebhookName, "")
95
	expectRevision(t, w, "")
96
}
97

98
func TestHandlers(t *testing.T) {
99
	stop := test.NewStop(t)
100
	client := kube.NewFakeClient()
101
	w := NewDefaultWatcher(client, "default").(*defaultWatcher)
102
	client.RunAndWait(stop)
103
	go w.Run(stop)
104
	whc := clienttest.Wrap(t, w.webhooks)
105
	expectRevision(t, w, "")
106

107
	// add a handler to watch default revision changes, ensure it's triggered
108
	newDefaultChan := make(chan string)
109
	handler := func(revision string) {
110
		newDefaultChan <- revision
111
	}
112
	w.AddHandler(handler)
113
	whc.CreateOrUpdate(webhook("green"))
114
	expectRevisionChan(t, newDefaultChan, "green")
115
}
116

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

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

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

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