(t *testing.T)
| 699 | } |
| 700 | |
| 701 | func TestClientResurrectDeadSeeds(t *testing.T) { |
| 702 | initialSeed := NewMockBroker(t, 0) |
| 703 | metadataResponse := new(MetadataResponse) |
| 704 | metadataResponse.AddBroker(initialSeed.Addr(), initialSeed.BrokerID()) |
| 705 | initialSeed.Returns(metadataResponse) |
| 706 | |
| 707 | conf := NewTestConfig() |
| 708 | conf.Metadata.Retry.Backoff = 0 |
| 709 | conf.Metadata.RefreshFrequency = 0 |
| 710 | c, err := NewClient([]string{initialSeed.Addr()}, conf) |
| 711 | if err != nil { |
| 712 | t.Fatal(err) |
| 713 | } |
| 714 | |
| 715 | client := c.(*client) |
| 716 | |
| 717 | seed1 := NewMockBroker(t, 1) |
| 718 | seed2 := NewMockBroker(t, 2) |
| 719 | seed3 := NewMockBroker(t, 3) |
| 720 | addr1 := seed1.Addr() |
| 721 | addr2 := seed2.Addr() |
| 722 | addr3 := seed3.Addr() |
| 723 | |
| 724 | // Overwrite the seed brokers with a fixed ordering to make this test deterministic. |
| 725 | safeClose(t, client.seedBrokers[0]) |
| 726 | client.seedBrokers = []*Broker{NewBroker(addr1), NewBroker(addr2), NewBroker(addr3)} |
| 727 | client.deadSeeds = []*Broker{} |
| 728 | client.brokers = map[int32]*Broker{} |
| 729 | |
| 730 | wg := sync.WaitGroup{} |
| 731 | wg.Go(func() { |
| 732 | if err := client.RefreshMetadata(); err != nil { |
| 733 | t.Error(err) |
| 734 | } |
| 735 | }) |
| 736 | seed1.Close() |
| 737 | seed2.Close() |
| 738 | |
| 739 | seed1 = NewMockBrokerAddr(t, 1, addr1) |
| 740 | seed2 = NewMockBrokerAddr(t, 2, addr2) |
| 741 | |
| 742 | seed3.Close() |
| 743 | |
| 744 | seed1.Close() |
| 745 | metadataResponse2 := new(MetadataResponse) |
| 746 | metadataResponse2.AddBroker(seed2.Addr(), seed2.BrokerID()) |
| 747 | seed2.Returns(metadataResponse2) |
| 748 | |
| 749 | wg.Wait() |
| 750 | |
| 751 | if len(client.seedBrokers) != 2 { |
| 752 | t.Error("incorrect number of live seeds") |
| 753 | } |
| 754 | if len(client.deadSeeds) != 1 { |
| 755 | t.Error("incorrect number of dead seeds") |
| 756 | } |
| 757 | |
| 758 | seed2.Close() |
nothing calls this directly
no test coverage detected