(t *testing.T, clusterName string, size int)
| 6414 | } |
| 6415 | |
| 6416 | func setupJSClusterWithSize(t *testing.T, clusterName string, size int) []*jsServer { |
| 6417 | t.Helper() |
| 6418 | nodes := make([]*jsServer, size) |
| 6419 | opts := make([]*server.Options, 0) |
| 6420 | |
| 6421 | var activeListeners []net.Listener |
| 6422 | getAddr := func(t *testing.T) (string, string, int) { |
| 6423 | l, err := net.Listen("tcp", "127.0.0.1:0") |
| 6424 | if err != nil { |
| 6425 | t.Fatalf("Unexpected error: %v", err) |
| 6426 | } |
| 6427 | |
| 6428 | addr := l.Addr() |
| 6429 | host := addr.(*net.TCPAddr).IP.String() |
| 6430 | port := addr.(*net.TCPAddr).Port |
| 6431 | time.Sleep(100 * time.Millisecond) |
| 6432 | |
| 6433 | // we cannot close the listener immediately to avoid duplicate port binding |
| 6434 | // the returned net.Listener has to be closed after all ports are drawn |
| 6435 | activeListeners = append(activeListeners, l) |
| 6436 | return addr.String(), host, port |
| 6437 | } |
| 6438 | |
| 6439 | routes := []string{} |
| 6440 | for i := 0; i < size; i++ { |
| 6441 | o := natsserver.DefaultTestOptions |
| 6442 | o.JetStream = true |
| 6443 | o.ServerName = fmt.Sprintf("NODE_%d", i) |
| 6444 | tdir, err := os.MkdirTemp(os.TempDir(), fmt.Sprintf("%s_%s-", o.ServerName, clusterName)) |
| 6445 | if err != nil { |
| 6446 | t.Fatal(err) |
| 6447 | } |
| 6448 | o.StoreDir = tdir |
| 6449 | |
| 6450 | if size > 1 { |
| 6451 | o.Cluster.Name = clusterName |
| 6452 | _, host1, port1 := getAddr(t) |
| 6453 | o.Host = host1 |
| 6454 | o.Port = port1 |
| 6455 | |
| 6456 | addr2, host2, port2 := getAddr(t) |
| 6457 | o.Cluster.Host = host2 |
| 6458 | o.Cluster.Port = port2 |
| 6459 | o.Tags = []string{o.ServerName} |
| 6460 | routes = append(routes, fmt.Sprintf("nats://%s", addr2)) |
| 6461 | } |
| 6462 | opts = append(opts, &o) |
| 6463 | } |
| 6464 | // close all connections used to randomize ports |
| 6465 | for _, l := range activeListeners { |
| 6466 | l.Close() |
| 6467 | } |
| 6468 | |
| 6469 | if size > 1 { |
| 6470 | routesStr := server.RoutesFromStr(strings.Join(routes, ",")) |
| 6471 | |
| 6472 | for i, o := range opts { |
| 6473 | o.Routes = routesStr |
no test coverage detected