mirror of
https://github.com/kubernetes/client-go.git
synced 2025-07-21 10:30:24 +00:00
Clean up leaked goroutines in cache unit tests
Kubernetes-commit: 6747bf7a9cb3009aae4cba1e1d249d56a66a981b
This commit is contained in:
parent
d01bdb17a5
commit
a3cad0dc91
22
tools/cache/delta_fifo_test.go
vendored
22
tools/cache/delta_fifo_test.go
vendored
@ -89,6 +89,15 @@ func testPop(f *DeltaFIFO) testFifoObject {
|
|||||||
return Pop(f).(Deltas).Newest().Object.(testFifoObject)
|
return Pop(f).(Deltas).Newest().Object.(testFifoObject)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// testPopIfAvailable returns `{}, false` if Pop returns a nil object
|
||||||
|
func testPopIfAvailable(f *DeltaFIFO) (testFifoObject, bool) {
|
||||||
|
obj := Pop(f)
|
||||||
|
if obj == nil {
|
||||||
|
return testFifoObject{}, false
|
||||||
|
}
|
||||||
|
return obj.(Deltas).Newest().Object.(testFifoObject), true
|
||||||
|
}
|
||||||
|
|
||||||
// literalListerGetter is a KeyListerGetter that is based on a
|
// literalListerGetter is a KeyListerGetter that is based on a
|
||||||
// function that returns a slice of objects to list and get.
|
// function that returns a slice of objects to list and get.
|
||||||
// The function must list the same objects every time.
|
// The function must list the same objects every time.
|
||||||
@ -306,6 +315,7 @@ func TestDeltaFIFOW_ReplaceMakesDeletionsForObjectsOnlyInQueue(t *testing.T) {
|
|||||||
|
|
||||||
func TestDeltaFIFO_addUpdate(t *testing.T) {
|
func TestDeltaFIFO_addUpdate(t *testing.T) {
|
||||||
f := NewDeltaFIFOWithOptions(DeltaFIFOOptions{KeyFunction: testFifoObjectKeyFunc})
|
f := NewDeltaFIFOWithOptions(DeltaFIFOOptions{KeyFunction: testFifoObjectKeyFunc})
|
||||||
|
defer f.Close()
|
||||||
f.Add(mkFifoObj("foo", 10))
|
f.Add(mkFifoObj("foo", 10))
|
||||||
f.Update(mkFifoObj("foo", 12))
|
f.Update(mkFifoObj("foo", 12))
|
||||||
f.Delete(mkFifoObj("foo", 15))
|
f.Delete(mkFifoObj("foo", 15))
|
||||||
@ -320,7 +330,10 @@ func TestDeltaFIFO_addUpdate(t *testing.T) {
|
|||||||
got := make(chan testFifoObject, 2)
|
got := make(chan testFifoObject, 2)
|
||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
obj := testPop(f)
|
obj, ok := testPopIfAvailable(f)
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
t.Logf("got a thing %#v", obj)
|
t.Logf("got a thing %#v", obj)
|
||||||
t.Logf("D len: %v", len(f.queue))
|
t.Logf("D len: %v", len(f.queue))
|
||||||
got <- obj
|
got <- obj
|
||||||
@ -471,12 +484,17 @@ func TestDeltaFIFO_enqueueingWithLister(t *testing.T) {
|
|||||||
|
|
||||||
func TestDeltaFIFO_addReplace(t *testing.T) {
|
func TestDeltaFIFO_addReplace(t *testing.T) {
|
||||||
f := NewDeltaFIFOWithOptions(DeltaFIFOOptions{KeyFunction: testFifoObjectKeyFunc})
|
f := NewDeltaFIFOWithOptions(DeltaFIFOOptions{KeyFunction: testFifoObjectKeyFunc})
|
||||||
|
defer f.Close()
|
||||||
f.Add(mkFifoObj("foo", 10))
|
f.Add(mkFifoObj("foo", 10))
|
||||||
f.Replace([]interface{}{mkFifoObj("foo", 15)}, "0")
|
f.Replace([]interface{}{mkFifoObj("foo", 15)}, "0")
|
||||||
got := make(chan testFifoObject, 2)
|
got := make(chan testFifoObject, 2)
|
||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
got <- testPop(f)
|
obj, ok := testPopIfAvailable(f)
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
got <- obj
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
14
tools/cache/fifo_test.go
vendored
14
tools/cache/fifo_test.go
vendored
@ -117,6 +117,7 @@ func TestFIFO_basic(t *testing.T) {
|
|||||||
|
|
||||||
func TestFIFO_addUpdate(t *testing.T) {
|
func TestFIFO_addUpdate(t *testing.T) {
|
||||||
f := NewFIFO(testFifoObjectKeyFunc)
|
f := NewFIFO(testFifoObjectKeyFunc)
|
||||||
|
defer f.Close()
|
||||||
f.Add(mkFifoObj("foo", 10))
|
f.Add(mkFifoObj("foo", 10))
|
||||||
f.Update(mkFifoObj("foo", 15))
|
f.Update(mkFifoObj("foo", 15))
|
||||||
|
|
||||||
@ -130,7 +131,11 @@ func TestFIFO_addUpdate(t *testing.T) {
|
|||||||
got := make(chan testFifoObject, 2)
|
got := make(chan testFifoObject, 2)
|
||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
got <- Pop(f).(testFifoObject)
|
obj := Pop(f)
|
||||||
|
if obj == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
got <- obj.(testFifoObject)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@ -151,12 +156,17 @@ func TestFIFO_addUpdate(t *testing.T) {
|
|||||||
|
|
||||||
func TestFIFO_addReplace(t *testing.T) {
|
func TestFIFO_addReplace(t *testing.T) {
|
||||||
f := NewFIFO(testFifoObjectKeyFunc)
|
f := NewFIFO(testFifoObjectKeyFunc)
|
||||||
|
defer f.Close()
|
||||||
f.Add(mkFifoObj("foo", 10))
|
f.Add(mkFifoObj("foo", 10))
|
||||||
f.Replace([]interface{}{mkFifoObj("foo", 15)}, "15")
|
f.Replace([]interface{}{mkFifoObj("foo", 15)}, "15")
|
||||||
got := make(chan testFifoObject, 2)
|
got := make(chan testFifoObject, 2)
|
||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
got <- Pop(f).(testFifoObject)
|
obj := Pop(f)
|
||||||
|
if obj == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
got <- obj.(testFifoObject)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
10
tools/cache/main_test.go
vendored
10
tools/cache/main_test.go
vendored
@ -23,13 +23,5 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestMain(m *testing.M) {
|
func TestMain(m *testing.M) {
|
||||||
options := []goleak.Option{
|
goleak.VerifyTestMain(m)
|
||||||
// These tests run goroutines which get stuck in Pop.
|
|
||||||
// This cannot be fixed without modifying the API.
|
|
||||||
goleak.IgnoreAnyFunction("k8s.io/client-go/tools/cache.TestFIFO_addReplace.func1"),
|
|
||||||
goleak.IgnoreAnyFunction("k8s.io/client-go/tools/cache.TestFIFO_addUpdate.func1"),
|
|
||||||
goleak.IgnoreAnyFunction("k8s.io/client-go/tools/cache.TestDeltaFIFO_addReplace.func1"),
|
|
||||||
goleak.IgnoreAnyFunction("k8s.io/client-go/tools/cache.TestDeltaFIFO_addUpdate.func1"),
|
|
||||||
}
|
|
||||||
goleak.VerifyTestMain(m, options...)
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user