istio

Форк
0
179 строк · 4.3 Кб
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 distribution
16

17
import (
18
	"encoding/json"
19
	"reflect"
20
	"testing"
21

22
	"istio.io/api/meta/v1alpha1"
23
	"istio.io/istio/pilot/pkg/status"
24
	"istio.io/istio/pkg/config"
25
	"istio.io/istio/pkg/test/util/assert"
26
)
27

28
var statusStillPropagating = &v1alpha1.IstioStatus{
29
	Conditions: []*v1alpha1.IstioCondition{
30
		{
31
			Type:    "PassedValidation",
32
			Status:  "True",
33
			Message: "just a test, here",
34
		},
35
		{
36
			Type:    "Reconciled",
37
			Status:  "False",
38
			Message: "1/2 proxies up to date.",
39
		},
40
	},
41
	ValidationMessages: nil,
42
}
43

44
func TestReconcileStatuses(t *testing.T) {
45
	type args struct {
46
		current *config.Config
47
		desired Progress
48
	}
49
	tests := []struct {
50
		name  string
51
		args  args
52
		want  bool
53
		want1 *v1alpha1.IstioStatus
54
	}{
55
		{
56
			name: "Don't Reconcile when other fields are the only diff",
57
			args: args{
58
				current: &config.Config{Status: statusStillPropagating},
59
				desired: Progress{1, 2},
60
			},
61
			want: false,
62
		}, {
63
			name: "Simple Reconcile to true",
64
			args: args{
65
				current: &config.Config{Status: statusStillPropagating},
66
				desired: Progress{1, 3},
67
			},
68
			want: true,
69
			want1: &v1alpha1.IstioStatus{
70
				Conditions: []*v1alpha1.IstioCondition{
71
					{
72
						Type:    "PassedValidation",
73
						Status:  "True",
74
						Message: "just a test, here",
75
					},
76
					{
77
						Type:    "Reconciled",
78
						Status:  "False",
79
						Message: "1/3 proxies up to date.",
80
					},
81
				},
82
				ValidationMessages: nil,
83
			},
84
		}, {
85
			name: "Simple Reconcile to false",
86
			args: args{
87
				current: &config.Config{Status: statusStillPropagating},
88
				desired: Progress{2, 2},
89
			},
90
			want: true,
91
			want1: &v1alpha1.IstioStatus{
92
				Conditions: []*v1alpha1.IstioCondition{
93
					{
94
						Type:    "PassedValidation",
95
						Status:  "True",
96
						Message: "just a test, here",
97
					},
98
					{
99
						Type:    "Reconciled",
100
						Status:  "True",
101
						Message: "2/2 proxies up to date.",
102
					},
103
				},
104
				ValidationMessages: nil,
105
			},
106
		}, {
107
			name: "Reconcile for message difference",
108
			args: args{
109
				current: &config.Config{Status: statusStillPropagating},
110
				desired: Progress{2, 3},
111
			},
112
			want: true,
113
			want1: &v1alpha1.IstioStatus{
114
				Conditions: []*v1alpha1.IstioCondition{
115
					{
116
						Type:    "PassedValidation",
117
						Status:  "True",
118
						Message: "just a test, here",
119
					},
120
					{
121
						Type:    "Reconciled",
122
						Status:  "False",
123
						Message: "2/3 proxies up to date.",
124
					},
125
				},
126
			},
127
		},
128
	}
129
	for _, tt := range tests {
130
		t.Run(tt.name, func(t *testing.T) {
131
			got, got1 := ReconcileStatuses(tt.args.current.Status.(*v1alpha1.IstioStatus), tt.args.desired)
132
			if got != tt.want {
133
				t.Errorf("ReconcileStatuses() got = %v, want %v", got, tt.want)
134
			}
135
			if tt.want1 != nil {
136
				for i := range tt.want1.Conditions {
137
					if got1 != nil && i < len(got1.Conditions) {
138
						tt.want1.Conditions[i].LastTransitionTime = got1.Conditions[i].LastTransitionTime
139
						tt.want1.Conditions[i].LastProbeTime = got1.Conditions[i].LastProbeTime
140
					}
141
				}
142
				assert.Equal(t, got1, tt.want1)
143
			}
144
		})
145
	}
146
}
147

148
func Test_getTypedStatus(t *testing.T) {
149
	x := v1alpha1.IstioStatus{}
150
	b, _ := json.Marshal(statusStillPropagating)
151
	_ = json.Unmarshal(b, &x)
152
	type args struct {
153
		in any
154
	}
155
	tests := []struct {
156
		name    string
157
		args    args
158
		wantOut *v1alpha1.IstioStatus
159
		wantErr bool
160
	}{
161
		{
162
			name:    "Nondestructive cast",
163
			args:    args{in: statusStillPropagating},
164
			wantOut: statusStillPropagating,
165
		},
166
	}
167
	for _, tt := range tests {
168
		t.Run(tt.name, func(t *testing.T) {
169
			gotOut, err := status.GetTypedStatus(tt.args.in)
170
			if (err != nil) != tt.wantErr {
171
				t.Errorf("GetTypedStatus() error = %v, wantErr %v", err, tt.wantErr)
172
				return
173
			}
174
			if !reflect.DeepEqual(gotOut, tt.wantOut) {
175
				t.Errorf("GetTypedStatus() gotOut = %v, want %v", gotOut, tt.wantOut)
176
			}
177
		})
178
	}
179
}
180

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

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

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

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