MCPcopy
hub / github.com/nats-io/nats.go / TestReconnectToServerCallback

Function TestReconnectToServerCallback

test/reconnect_test.go:1509–1729  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

1507}
1508
1509func TestReconnectToServerCallback(t *testing.T) {
1510 t.Run("select custom server", func(t *testing.T) {
1511 srv1 := RunServerOnPort(-1)
1512 defer srv1.Shutdown()
1513 srv2 := RunServerOnPort(-1)
1514 defer srv2.Shutdown()
1515
1516 url1 := srv1.ClientURL()
1517 url2 := srv2.ClientURL()
1518
1519 var callbackCalled atomic.Int32
1520 reconnectCh := make(chan bool, 1)
1521
1522 nc, err := nats.Connect(
1523 url1+","+url2,
1524 nats.ReconnectWait(100*time.Millisecond),
1525 nats.MaxReconnects(10),
1526 nats.DontRandomize(),
1527 nats.ReconnectToServer(func(servers []nats.Server, info nats.ServerInfo) (*nats.Server, time.Duration) {
1528 callbackCalled.Add(1)
1529 for i := range servers {
1530 if servers[i].URL.String() == url2 {
1531 return &servers[i], 0
1532 }
1533 }
1534 return &servers[0], 0
1535 }),
1536 nats.ReconnectHandler(func(_ *nats.Conn) {
1537 select {
1538 case reconnectCh <- true:
1539 default:
1540 }
1541 }),
1542 )
1543 if err != nil {
1544 t.Fatalf("Failed to connect: %v", err)
1545 }
1546 defer nc.Close()
1547
1548 if nc.ConnectedUrl() != url1 {
1549 t.Fatalf("Expected initial connection to %s, got %s", url1, nc.ConnectedUrl())
1550 }
1551
1552 // try reconnecting a few times, we should end up on url2 each time
1553 for i := range 5 {
1554 if err := nc.ForceReconnect(); err != nil {
1555 t.Fatalf("Failed to force reconnect: %v", err)
1556 }
1557
1558 select {
1559 case <-reconnectCh:
1560 case <-time.After(2 * time.Second):
1561 t.Fatal("Timed out waiting for reconnect")
1562 }
1563
1564 if callbackCalled.Load() != int32(i+1) {
1565 t.Fatal("Expected ReconnectToServer callback to be called on each reconnect")
1566 }

Callers

nothing calls this directly

Calls 12

ConnectMethod · 0.80
ReconnectHandlerMethod · 0.80
FatalfMethod · 0.80
ConnectedUrlMethod · 0.80
ForceReconnectMethod · 0.80
LoadMethod · 0.80
StoreMethod · 0.80
RunServerOnPortFunction · 0.70
AddMethod · 0.65
StringMethod · 0.45
CloseMethod · 0.45
IsMethod · 0.45

Tested by

no test coverage detected