istio

Форк
0
/
resourcelock_test.go 
88 строк · 2.1 Кб
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 status
16

17
import (
18
	"context"
19
	"sync/atomic"
20
	"testing"
21

22
	. "github.com/onsi/gomega"
23
	"k8s.io/apimachinery/pkg/runtime/schema"
24

25
	"istio.io/api/meta/v1alpha1"
26
	"istio.io/istio/pkg/config"
27
)
28

29
func TestResourceLock_Lock(t *testing.T) {
30
	g := NewGomegaWithT(t)
31
	r1 := Resource{
32
		GroupVersionResource: schema.GroupVersionResource{
33
			Group:   "r1",
34
			Version: "r1",
35
		},
36
		Namespace:  "r1",
37
		Name:       "r1",
38
		Generation: "11",
39
	}
40
	r1a := Resource{
41
		GroupVersionResource: schema.GroupVersionResource{
42
			Group:   "r1",
43
			Version: "r1",
44
		},
45
		Namespace:  "r1",
46
		Name:       "r1",
47
		Generation: "12",
48
	}
49
	var runCount int32
50
	x := make(chan struct{})
51
	y := make(chan struct{})
52
	mgr := NewManager(nil)
53
	fakefunc := func(status *v1alpha1.IstioStatus, context any) *v1alpha1.IstioStatus {
54
		x <- struct{}{}
55
		atomic.AddInt32(&runCount, 1)
56
		y <- struct{}{}
57
		return nil
58
	}
59
	c1 := mgr.CreateIstioStatusController(fakefunc)
60
	c2 := mgr.CreateIstioStatusController(fakefunc)
61
	workers := NewWorkerPool(func(_ *config.Config, _ any) {
62
	}, func(resource Resource) *config.Config {
63
		return &config.Config{
64
			Meta: config.Meta{Generation: 11},
65
		}
66
	}, 10)
67
	ctx, cancel := context.WithCancel(context.Background())
68
	workers.Run(ctx)
69
	workers.Push(r1, c1, nil)
70
	workers.Push(r1, c2, nil)
71
	workers.Push(r1, c1, nil)
72
	<-x
73
	<-y
74
	<-x
75
	workers.Push(r1, c1, nil)
76
	workers.Push(r1a, c1, nil)
77
	<-y
78
	<-x
79
	select {
80
	case <-x:
81
		t.FailNow()
82
	default:
83
	}
84
	<-y
85
	result := atomic.LoadInt32(&runCount)
86
	g.Expect(result).To(Equal(int32(3)))
87
	cancel()
88
}
89

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

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

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

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