NewMockBrokerAddr behaves like newMockBroker but listens on the address you give it rather than just some ephemeral port.
(t TestReporter, brokerID int32, addr string)
| 410 | // NewMockBrokerAddr behaves like newMockBroker but listens on the address you give |
| 411 | // it rather than just some ephemeral port. |
| 412 | func NewMockBrokerAddr(t TestReporter, brokerID int32, addr string) *MockBroker { |
| 413 | var ( |
| 414 | listener net.Listener |
| 415 | err error |
| 416 | ) |
| 417 | |
| 418 | // retry up to 20 times if address already in use (e.g., if replacing broker which hasn't cleanly shutdown) |
| 419 | for range 20 { |
| 420 | listener, err = net.Listen("tcp", addr) |
| 421 | if err != nil { |
| 422 | if errors.Is(err, syscall.EADDRINUSE) { |
| 423 | Logger.Printf("*** mockbroker/%d waiting for %s (address already in use)", brokerID, addr) |
| 424 | time.Sleep(time.Millisecond * 100) |
| 425 | continue |
| 426 | } |
| 427 | t.Fatal(err) |
| 428 | } |
| 429 | break |
| 430 | } |
| 431 | |
| 432 | if err != nil { |
| 433 | t.Fatal(err) |
| 434 | } |
| 435 | |
| 436 | return NewMockBrokerListener(t, brokerID, listener) |
| 437 | } |
| 438 | |
| 439 | // NewMockBrokerListener behaves like newMockBrokerAddr but accepts connections on the listener specified. |
| 440 | func NewMockBrokerListener(t TestReporter, brokerID int32, listener net.Listener) *MockBroker { |