Skip to content

Commit 58fe98e

Browse files
authored
Merge pull request kubernetes#125144 from p0lyn0mial/upstream-client-go-consistency-detector-refactor-units
client-go/tools/cache/reflector_data_consistency_detector: refactor unit tests
2 parents f5d62f7 + 18837d6 commit 58fe98e

File tree

1 file changed

+32
-26
lines changed

1 file changed

+32
-26
lines changed

staging/src/k8s.io/client-go/tools/cache/reflector_data_consistency_detector_test.go

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,15 @@ import (
2626
v1 "k8s.io/api/core/v1"
2727
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2828
"k8s.io/apimachinery/pkg/runtime"
29-
"k8s.io/apimachinery/pkg/util/wait"
30-
"k8s.io/apimachinery/pkg/watch"
3129
"k8s.io/utils/ptr"
3230
)
3331

3432
func TestDataConsistencyChecker(t *testing.T) {
3533
scenarios := []struct {
3634
name string
3735

38-
podList *v1.PodList
39-
storeContent []*v1.Pod
36+
listResponse *v1.PodList
37+
retrievedItems []*v1.Pod
4038
requestOptions metav1.ListOptions
4139

4240
expectedRequestOptions []metav1.ListOptions
@@ -45,12 +43,12 @@ func TestDataConsistencyChecker(t *testing.T) {
4543
}{
4644
{
4745
name: "data consistency check won't panic when data is consistent",
48-
podList: &v1.PodList{
46+
listResponse: &v1.PodList{
4947
ListMeta: metav1.ListMeta{ResourceVersion: "2"},
5048
Items: []v1.Pod{*makePod("p1", "1"), *makePod("p2", "2")},
5149
},
5250
requestOptions: metav1.ListOptions{TimeoutSeconds: ptr.To(int64(39))},
53-
storeContent: []*v1.Pod{makePod("p1", "1"), makePod("p2", "2")},
51+
retrievedItems: []*v1.Pod{makePod("p1", "1"), makePod("p2", "2")},
5452
expectedListRequests: 1,
5553
expectedRequestOptions: []metav1.ListOptions{
5654
{
@@ -63,7 +61,7 @@ func TestDataConsistencyChecker(t *testing.T) {
6361

6462
{
6563
name: "data consistency check won't panic when there is no data",
66-
podList: &v1.PodList{
64+
listResponse: &v1.PodList{
6765
ListMeta: metav1.ListMeta{ResourceVersion: "2"},
6866
},
6967
requestOptions: metav1.ListOptions{TimeoutSeconds: ptr.To(int64(39))},
@@ -79,12 +77,12 @@ func TestDataConsistencyChecker(t *testing.T) {
7977

8078
{
8179
name: "data consistency panics when data is inconsistent",
82-
podList: &v1.PodList{
80+
listResponse: &v1.PodList{
8381
ListMeta: metav1.ListMeta{ResourceVersion: "2"},
8482
Items: []v1.Pod{*makePod("p1", "1"), *makePod("p2", "2"), *makePod("p3", "3")},
8583
},
8684
requestOptions: metav1.ListOptions{TimeoutSeconds: ptr.To(int64(39))},
87-
storeContent: []*v1.Pod{makePod("p1", "1"), makePod("p2", "2")},
85+
retrievedItems: []*v1.Pod{makePod("p1", "1"), makePod("p2", "2")},
8886
expectedListRequests: 1,
8987
expectedRequestOptions: []metav1.ListOptions{
9088
{
@@ -99,23 +97,22 @@ func TestDataConsistencyChecker(t *testing.T) {
9997

10098
for _, scenario := range scenarios {
10199
t.Run(scenario.name, func(t *testing.T) {
102-
listWatcher, store, _, stopCh := testData()
103-
ctx := wait.ContextForChannel(stopCh)
104-
for _, obj := range scenario.storeContent {
105-
require.NoError(t, store.Add(obj))
100+
ctx := context.TODO()
101+
fakeLister := &listWrapper{response: scenario.listResponse}
102+
retrievedItemsFunc := func() []*v1.Pod {
103+
return scenario.retrievedItems
106104
}
107-
listWatcher.customListResponse = scenario.podList
108105

109106
if scenario.expectPanic {
110107
require.Panics(t, func() {
111-
checkDataConsistency(ctx, "", scenario.podList.ResourceVersion, wrapListFuncWithContext(listWatcher.List), scenario.requestOptions, store.List)
108+
checkDataConsistency(ctx, "", scenario.listResponse.ResourceVersion, fakeLister.List, scenario.requestOptions, retrievedItemsFunc)
112109
})
113110
} else {
114-
checkDataConsistency(ctx, "", scenario.podList.ResourceVersion, wrapListFuncWithContext(listWatcher.List), scenario.requestOptions, store.List)
111+
checkDataConsistency(ctx, "", scenario.listResponse.ResourceVersion, fakeLister.List, scenario.requestOptions, retrievedItemsFunc)
115112
}
116113

117-
verifyListCounter(t, listWatcher, scenario.expectedListRequests)
118-
verifyRequestOptions(t, listWatcher, scenario.expectedRequestOptions)
114+
require.Equal(t, fakeLister.counter, scenario.expectedListRequests)
115+
require.Equal(t, fakeLister.requestOptions, scenario.expectedRequestOptions)
119116
})
120117
}
121118
}
@@ -126,29 +123,38 @@ func TestDriveWatchLisConsistencyIfRequired(t *testing.T) {
126123
}
127124

128125
func TestDataConsistencyCheckerRetry(t *testing.T) {
129-
store := NewStore(MetaNamespaceKeyFunc)
130126
ctx := context.TODO()
131-
127+
retrievedItemsFunc := func() []*v1.Pod {
128+
return nil
129+
}
132130
stopListErrorAfter := 5
133-
errLister := &errorLister{stopErrorAfter: stopListErrorAfter}
131+
fakeErrLister := &errorLister{stopErrorAfter: stopListErrorAfter}
134132

135-
checkDataConsistency(ctx, "", "", wrapListFuncWithContext(errLister.List), metav1.ListOptions{}, store.List)
136-
require.Equal(t, errLister.listCounter, errLister.stopErrorAfter)
133+
checkDataConsistency(ctx, "", "", fakeErrLister.List, metav1.ListOptions{}, retrievedItemsFunc)
134+
require.Equal(t, fakeErrLister.listCounter, fakeErrLister.stopErrorAfter)
137135
}
138136

139137
type errorLister struct {
140138
listCounter int
141139
stopErrorAfter int
142140
}
143141

144-
func (lw *errorLister) List(_ metav1.ListOptions) (runtime.Object, error) {
142+
func (lw *errorLister) List(_ context.Context, _ metav1.ListOptions) (runtime.Object, error) {
145143
lw.listCounter++
146144
if lw.listCounter == lw.stopErrorAfter {
147145
return &v1.PodList{}, nil
148146
}
149147
return nil, fmt.Errorf("nasty error")
150148
}
151149

152-
func (lw *errorLister) Watch(_ metav1.ListOptions) (watch.Interface, error) {
153-
panic("not implemented")
150+
type listWrapper struct {
151+
counter int
152+
requestOptions []metav1.ListOptions
153+
response *v1.PodList
154+
}
155+
156+
func (lw *listWrapper) List(_ context.Context, opts metav1.ListOptions) (*v1.PodList, error) {
157+
lw.counter++
158+
lw.requestOptions = append(lw.requestOptions, opts)
159+
return lw.response, nil
154160
}

0 commit comments

Comments
 (0)