// NewNode creates a new raft node to use for tests func NewNode(t *testing.T, clockSource *fakeclock.FakeClock, tc *cautils.TestCA, opts ...raft.NodeOptions) *TestNode { l, err := net.Listen("tcp", "127.0.0.1:0") require.NoError(t, err, "can't bind to raft service port") wrappedListener := NewWrappedListener(l) securityConfig, err := tc.NewNodeConfig(ca.ManagerRole) require.NoError(t, err) serverOpts := []grpc.ServerOption{grpc.Creds(securityConfig.ServerTLSCreds)} s := grpc.NewServer(serverOpts...) cfg := raft.DefaultNodeConfig() stateDir, err := ioutil.TempDir("", "test-raft") require.NoError(t, err, "can't create temporary state directory") keyRotator := NewSimpleKeyRotator(raft.EncryptionKeys{CurrentDEK: []byte("current")}) newNodeOpts := raft.NodeOptions{ ID: securityConfig.ClientTLSCreds.NodeID(), Addr: l.Addr().String(), Config: cfg, StateDir: stateDir, ClockSource: clockSource, TLSCredentials: securityConfig.ClientTLSCreds, KeyRotator: keyRotator, } if len(opts) > 1 { panic("more than one optional argument provided") } if len(opts) == 1 { newNodeOpts.JoinAddr = opts[0].JoinAddr if opts[0].Addr != "" { newNodeOpts.Addr = opts[0].Addr } } n := raft.NewNode(newNodeOpts) healthServer := health.NewHealthServer() api.RegisterHealthServer(s, healthServer) raft.Register(s, n) go func() { // After stopping, we should receive an error from Serve assert.Error(t, s.Serve(wrappedListener)) }() healthServer.SetServingStatus("Raft", api.HealthCheckResponse_SERVING) return &TestNode{ Node: n, Listener: wrappedListener, SecurityConfig: securityConfig, Address: newNodeOpts.Addr, StateDir: newNodeOpts.StateDir, Server: s, KeyRotator: keyRotator, } }
func testBrokerClient(t *testing.T, tca *testutils.TestCA, addr string) (api.LogBrokerClient, *ca.SecurityConfig, func()) { securityConfig, err := tca.NewNodeConfig(ca.WorkerRole) if err != nil { t.Fatal(err) } opts := []grpc.DialOption{grpc.WithTimeout(10 * time.Second), grpc.WithTransportCredentials(securityConfig.ClientTLSCreds)} cc, err := grpc.Dial(addr, opts...) if err != nil { t.Fatalf("error dialing local server: %v", err) } return api.NewLogBrokerClient(cc), securityConfig, func() { cc.Close() } }