39 lines
1.0 KiB
Go
39 lines
1.0 KiB
Go
package data
|
|
|
|
import "testing"
|
|
|
|
type reloadableTestClient struct{ id int }
|
|
|
|
func TestReloadableReclaimsRepublishedClient(t *testing.T) {
|
|
first := &reloadableTestClient{id: 1}
|
|
second := &reloadableTestClient{id: 2}
|
|
closed := map[*reloadableTestClient]int{}
|
|
clients := newReloadable(first, func(client *reloadableTestClient) { closed[client]++ })
|
|
|
|
clients.replace(second)
|
|
clients.replace(first)
|
|
|
|
if clients.retired.take(first) {
|
|
t.Fatal("republished client remained scheduled for retirement")
|
|
}
|
|
clients.close()
|
|
if closed[first] != 1 {
|
|
t.Fatalf("active client closed %d times, want 1", closed[first])
|
|
}
|
|
if closed[second] != 1 {
|
|
t.Fatalf("retired client closed %d times, want 1", closed[second])
|
|
}
|
|
}
|
|
|
|
func TestReloadableCloseDeduplicatesHandles(t *testing.T) {
|
|
client := &reloadableTestClient{id: 1}
|
|
closed := 0
|
|
clients := newReloadable(client, func(*reloadableTestClient) { closed++ })
|
|
clients.retired.items = append(clients.retired.items, client, client)
|
|
|
|
clients.close()
|
|
if closed != 1 {
|
|
t.Fatalf("client closed %d times, want 1", closed)
|
|
}
|
|
}
|