From e62770d76fc9508a2266d8bb8c6f2967e0dbc6fc Mon Sep 17 00:00:00 2001 From: Doug Fawley Date: Fri, 22 Mar 2024 14:59:36 -0700 Subject: [PATCH] channelz: add LocalAddr to listen sockets and test (#7062) (#7063) --- server.go | 8 +++++++- test/channelz_test.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/server.go b/server.go index 2babb4f9b4c1..fd4558daa52c 100644 --- a/server.go +++ b/server.go @@ -848,7 +848,13 @@ func (s *Server) Serve(lis net.Listener) error { ls := &listenSocket{ Listener: lis, - channelz: channelz.RegisterSocket(&channelz.Socket{SocketType: channelz.SocketTypeListen, Parent: s.channelz, RefName: lis.Addr().String(), SocketOptions: channelz.GetSocketOption(lis)}), + channelz: channelz.RegisterSocket(&channelz.Socket{ + SocketType: channelz.SocketTypeListen, + Parent: s.channelz, + RefName: lis.Addr().String(), + LocalAddr: lis.Addr(), + SocketOptions: channelz.GetSocketOption(lis)}, + ), } s.lis[ls] = true diff --git a/test/channelz_test.go b/test/channelz_test.go index 5e883d5342d3..1cc1e2e48de5 100644 --- a/test/channelz_test.go +++ b/test/channelz_test.go @@ -202,6 +202,49 @@ func (s) TestCZGetServer(t *testing.T) { } } +func (s) TestCZGetSocket(t *testing.T) { + e := tcpClearRREnv + te := newTest(t, e) + lis := te.listenAndServe(&testServer{security: e.security}, net.Listen) + defer te.tearDown() + + if err := verifyResultWithDelay(func() (bool, error) { + ss, _ := channelz.GetServers(0, 0) + if len(ss) != 1 { + return false, fmt.Errorf("len(ss) = %v; want %v", len(ss), 1) + } + + serverID := ss[0].ID + srv := channelz.GetServer(serverID) + if srv == nil { + return false, fmt.Errorf("server %d does not exist", serverID) + } + if srv.ID != serverID { + return false, fmt.Errorf("srv.ID = %d; want %v", srv.ID, serverID) + } + + skts := srv.ListenSockets() + if got, want := len(skts), 1; got != want { + return false, fmt.Errorf("len(skts) = %v; want %v", got, want) + } + var sktID int64 + for sktID = range skts { + } + + skt := channelz.GetSocket(sktID) + if skt == nil { + return false, fmt.Errorf("socket %v does not exist", sktID) + } + + if got, want := skt.LocalAddr, lis.Addr(); got != want { + return false, fmt.Errorf("socket %v LocalAddr=%v; want %v", sktID, got, want) + } + return true, nil + }); err != nil { + t.Fatal(err) + } +} + func (s) TestCZTopChannelRegistrationAndDeletion(t *testing.T) { testcases := []struct { total int