func (fm *FileMgr) setupNatsOptions() { if !fm.certs.skipTLS { err := fm.certs.certLoad() if err != nil { panic(err) } } o := []nats.Option{} o = append(o, nats.MaxReconnects(-1)) // -1 => keep trying forever o = append(o, nats.ReconnectWait(2*time.Second)) o = append(o, nats.Name("archiver")) o = append(o, nats.ErrorHandler(func(c *nats.Conn, s *nats.Subscription, e error) { fm.NatsAsyncErrCh <- asyncErr{conn: c, sub: s, err: e} })) o = append(o, nats.DisconnectHandler(func(conn *nats.Conn) { fm.NatsConnDisconCh <- conn })) o = append(o, nats.ReconnectHandler(func(conn *nats.Conn) { fm.NatsConnReconCh <- conn })) o = append(o, nats.ClosedHandler(func(conn *nats.Conn) { fm.NatsConnClosedCh <- conn })) if !fm.certs.skipTLS { o = append(o, nats.Secure(&fm.certs.tlsConfig)) o = append(o, fm.certs.rootCA) } fm.opts = o }
func TestOptions(t *testing.T) { s := RunDefaultServer() defer s.Shutdown() nc, err := nats.Connect(nats.DefaultURL, nats.Name("myName"), nats.MaxReconnects(2), nats.ReconnectWait(50*time.Millisecond)) if err != nil { t.Fatalf("Failed to connect: %v", err) } defer nc.Close() rch := make(chan bool) cch := make(chan bool) nc.SetReconnectHandler(func(_ *nats.Conn) { rch <- true }) nc.SetClosedHandler(func(_ *nats.Conn) { cch <- true }) s.Shutdown() s = RunDefaultServer() defer s.Shutdown() if err := Wait(rch); err != nil { t.Fatal("Failed getting reconnected cb") } nc.Close() if err := Wait(cch); err != nil { t.Fatal("Failed getting closed cb") } nc, err = nats.Connect(nats.DefaultURL, nats.NoReconnect()) if err != nil { t.Fatalf("Failed to connect: %v", err) } defer nc.Close() nc.SetReconnectHandler(func(_ *nats.Conn) { rch <- true }) nc.SetClosedHandler(func(_ *nats.Conn) { cch <- true }) s.Shutdown() // We should not get a reconnect cb this time if err := WaitTime(rch, time.Second); err == nil { t.Fatal("Unexpected reconnect cb") } nc.Close() if err := Wait(cch); err != nil { t.Fatal("Failed getting closed cb") } }