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

Function TestForceReconnect

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

Source from the content-addressed store, hash-verified

885}
886
887func TestForceReconnect(t *testing.T) {
888 s := RunDefaultServer()
889
890 nc, err := nats.Connect(s.ClientURL(), nats.ReconnectWait(10*time.Second))
891 if err != nil {
892 t.Fatalf("Unexpected error on connect: %v", err)
893 }
894
895 statusCh := nc.StatusChanged(nats.RECONNECTING, nats.CONNECTED)
896 defer close(statusCh)
897 newStatus := make(chan nats.Status, 10)
898 // non-blocking channel, so we need to be constantly listening
899 go func() {
900 for {
901 s, ok := <-statusCh
902 if !ok {
903 return
904 }
905 newStatus <- s
906 }
907 }()
908
909 sub, err := nc.SubscribeSync("foo")
910 if err != nil {
911 t.Fatalf("Error on subscribe: %v", err)
912 }
913 if err := nc.Publish("foo", []byte("msg")); err != nil {
914 t.Fatalf("Error on publish: %v", err)
915 }
916 _, err = sub.NextMsg(time.Second)
917 if err != nil {
918 t.Fatalf("Error getting message: %v", err)
919 }
920
921 // Force a reconnect
922 err = nc.ForceReconnect()
923 if err != nil {
924 t.Fatalf("Unexpected error on reconnect: %v", err)
925 }
926
927 WaitOnChannel(t, newStatus, nats.RECONNECTING)
928 WaitOnChannel(t, newStatus, nats.CONNECTED)
929
930 if err := nc.Publish("foo", []byte("msg")); err != nil {
931 t.Fatalf("Error on publish: %v", err)
932 }
933 _, err = sub.NextMsg(time.Second)
934 if err != nil {
935 t.Fatalf("Error getting message: %v", err)
936 }
937
938 // shutdown server and then force a reconnect
939 s.Shutdown()
940 WaitOnChannel(t, newStatus, nats.RECONNECTING)
941 _, err = sub.NextMsg(100 * time.Millisecond)
942 if err == nil {
943 t.Fatal("Expected error getting message")
944 }

Callers

nothing calls this directly

Calls 10

WaitOnChannelFunction · 0.85
ConnectMethod · 0.80
FatalfMethod · 0.80
NextMsgMethod · 0.80
ForceReconnectMethod · 0.80
RunDefaultServerFunction · 0.70
SubscribeSyncMethod · 0.65
PublishMethod · 0.65
StatusChangedMethod · 0.45
CloseMethod · 0.45

Tested by

no test coverage detected