func NewListenerWithAddr(t *testing.T, addr string) net.Listener { l, err := transport.NewUnixListener(addr) if err != nil { t.Fatal(err) } return l }
func newBridge(addr string) (*bridge, error) { b := &bridge{ inaddr: addr + ".bridge", outaddr: addr, conns: make(map[*bridgeConn]struct{}), stopc: make(chan struct{}, 1), } l, err := transport.NewUnixListener(b.inaddr) if err != nil { return nil, fmt.Errorf("listen failed on socket %s (%v)", addr, err) } b.l = l b.wg.Add(1) go b.serveListen() return b, nil }
// listenGRPC starts a grpc server over a unix domain socket on the member func (m *member) listenGRPC() error { // prefix with localhost so cert has right domain m.grpcAddr = "localhost:" + m.Name + ".sock" l, err := transport.NewUnixListener(m.grpcAddr) if err != nil { return fmt.Errorf("listen failed on grpc socket %s (%v)", m.grpcAddr, err) } m.grpcBridge, err = newBridge(m.grpcAddr) if err != nil { l.Close() return err } m.grpcAddr = m.grpcBridge.URL() m.grpcListener = l return nil }
func TestV3ClientMetrics(t *testing.T) { defer testutil.AfterTest(t) var ( addr string = "localhost:27989" ln net.Listener err error ) // listen for all prometheus metrics donec := make(chan struct{}) go func() { defer close(donec) srv := &http.Server{Handler: prometheus.Handler()} srv.SetKeepAlivesEnabled(false) ln, err = transport.NewUnixListener(addr) if err != nil { t.Fatalf("Error: %v occurred while listening on addr: %v", err, addr) } err = srv.Serve(ln) if err != nil && !strings.Contains(err.Error(), "use of closed network connection") { t.Fatalf("Err serving http requests: %v", err) } }() url := "unix://" + addr + "/metrics" clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 1}) defer clus.Terminate(t) client := clus.Client(0) w := clientv3.NewWatcher(client) defer w.Close() kv := clientv3.NewKV(client) wc := w.Watch(context.Background(), "foo") wBefore := sumCountersForMetricAndLabels(t, url, "grpc_client_msg_received_total", "Watch", "bidi_stream") pBefore := sumCountersForMetricAndLabels(t, url, "grpc_client_started_total", "Put", "unary") _, err = kv.Put(context.Background(), "foo", "bar") if err != nil { t.Errorf("Error putting value in key store") } pAfter := sumCountersForMetricAndLabels(t, url, "grpc_client_started_total", "Put", "unary") if pBefore+1 != pAfter { t.Errorf("grpc_client_started_total expected %d, got %d", 1, pAfter-pBefore) } // consume watch response select { case <-wc: case <-time.After(10 * time.Second): t.Error("Timeout occurred for getting watch response") } wAfter := sumCountersForMetricAndLabels(t, url, "grpc_client_msg_received_total", "Watch", "bidi_stream") if wBefore+1 != wAfter { t.Errorf("grpc_client_msg_received_total expected %d, got %d", 1, wAfter-wBefore) } ln.Close() <-donec }