// TestParseJoinUsingAddrs verifies that JoinList is parsed // correctly. func TestParseJoinUsingAddrs(t *testing.T) { defer leaktest.AfterTest(t)() cfg := MakeConfig() cfg.JoinList = []string{"localhost:12345,,localhost:23456", "localhost:34567"} cfg.Stores = base.StoreSpecList{Specs: []base.StoreSpec{{InMemory: true, SizeInBytes: base.MinimumStoreSize * 100}}} engines, err := cfg.CreateEngines() if err != nil { t.Fatalf("Failed to initialize stores: %s", err) } defer engines.Close() if err := cfg.InitNode(); err != nil { t.Fatalf("Failed to initialize node: %s", err) } r1, err := resolver.NewResolver("localhost:12345") if err != nil { t.Fatal(err) } r2, err := resolver.NewResolver("localhost:23456") if err != nil { t.Fatal(err) } r3, err := resolver.NewResolver("localhost:34567") if err != nil { t.Fatal(err) } expected := []resolver.Resolver{r1, r2, r3} if !reflect.DeepEqual(cfg.GossipBootstrapResolvers, expected) { t.Fatalf("Unexpected bootstrap addresses: %v, expected: %v", cfg.GossipBootstrapResolvers, expected) } }
// TestClientRegisterInitNodeID verifies two client's gossip request with NodeID 0. func TestClientRegisterWithInitNodeID(t *testing.T) { defer leaktest.AfterTest(t)() stopper := stop.NewStopper() defer stopper.Stop() // Create three gossip nodes, and connect to the first with NodeID 0. var g []*Gossip var gossipAddr string for i := 0; i < 3; i++ { RPCContext := rpc.NewContext(log.AmbientContext{}, &base.Config{Insecure: true}, nil, stopper) server := rpc.NewServer(RPCContext) ln, err := netutil.ListenAndServeGRPC(stopper, server, util.IsolatedTestAddr) if err != nil { t.Fatal(err) } // Connect to the first gossip node. if gossipAddr == "" { gossipAddr = ln.Addr().String() } var resolvers []resolver.Resolver resolver, err := resolver.NewResolver(gossipAddr) if err != nil { t.Fatal(err) } resolvers = append(resolvers, resolver) // node ID must be non-zero gnode := NewTest( roachpb.NodeID(i+1), RPCContext, server, resolvers, stopper, metric.NewRegistry(), ) g = append(g, gnode) gnode.Start(ln.Addr()) } util.SucceedsSoon(t, func() error { // The first gossip node should have two gossip client address // in nodeMap if these three gossip nodes registered success. g[0].mu.Lock() defer g[0].mu.Unlock() if a, e := len(g[0].mu.nodeMap), 2; a != e { return errors.Errorf("expected %s to contain %d nodes, got %d", g[0].mu.nodeMap, e, a) } return nil }) }
// parseGossipBootstrapResolvers parses list of gossip bootstrap resolvers. func (cfg *Config) parseGossipBootstrapResolvers() ([]resolver.Resolver, error) { var bootstrapResolvers []resolver.Resolver for _, commaSeparatedAddresses := range cfg.JoinList { addresses := strings.Split(commaSeparatedAddresses, ",") for _, address := range addresses { if len(address) == 0 { continue } resolver, err := resolver.NewResolver(address) if err != nil { return nil, err } bootstrapResolvers = append(bootstrapResolvers, resolver) } } return bootstrapResolvers, nil }
func TestGossipGetNextBootstrapAddress(t *testing.T) { defer leaktest.AfterTest(t)() stopper := stop.NewStopper() defer stopper.Stop() resolverSpecs := []string{ "127.0.0.1:9000", "127.0.0.1:9001", "localhost:9004", } resolvers := []resolver.Resolver{} for _, rs := range resolverSpecs { resolver, err := resolver.NewResolver(rs) if err == nil { resolvers = append(resolvers, resolver) } } if len(resolvers) != 3 { t.Errorf("expected 3 resolvers; got %d", len(resolvers)) } server := rpc.NewServer( rpc.NewContext(log.AmbientContext{}, &base.Config{Insecure: true}, nil, stopper), ) g := NewTest(0, nil, server, resolvers, stop.NewStopper(), metric.NewRegistry()) // Using specified resolvers, fetch bootstrap addresses 3 times // and verify the results match expected addresses. expAddresses := []string{ "127.0.0.1:9000", "127.0.0.1:9001", "localhost:9004", } for i := 0; i < len(expAddresses); i++ { if addr := g.getNextBootstrapAddress(); addr == nil { t.Errorf("%d: unexpected nil addr when expecting %s", i, expAddresses[i]) } else if addrStr := addr.String(); addrStr != expAddresses[i] { t.Errorf("%d: expected addr %s; got %s", i, expAddresses[i], addrStr) } } }