/* * * Copyright 2024 gRPC authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package peer import ( "context" "fmt" "testing" "google.golang.org/grpc/credentials" ) // A struct that implements AuthInfo interface and implements CommonAuthInfo() method. type testAuthInfo struct { credentials.CommonAuthInfo } func (ta testAuthInfo) AuthType() string { return fmt.Sprintf("testAuthInfo-%d", ta.SecurityLevel) } type addr struct { ipAddress string } func (addr) Network() string { return "" } func (a *addr) String() string { return a.ipAddress } func TestPeerStringer(t *testing.T) { testCases := []struct { name string peer *Peer want string }{ { name: "+Addr-LocalAddr+ValidAuth", peer: &Peer{Addr: &addr{"example.com:1234"}, AuthInfo: testAuthInfo{credentials.CommonAuthInfo{SecurityLevel: credentials.PrivacyAndIntegrity}}}, want: "Peer{Addr: 'example.com:1234', LocalAddr: , AuthInfo: 'testAuthInfo-3'}", }, { name: "+Addr+LocalAddr+ValidAuth", peer: &Peer{Addr: &addr{"example.com:1234"}, LocalAddr: &addr{"example.com:1234"}, AuthInfo: testAuthInfo{credentials.CommonAuthInfo{SecurityLevel: credentials.PrivacyAndIntegrity}}}, want: "Peer{Addr: 'example.com:1234', LocalAddr: 'example.com:1234', AuthInfo: 'testAuthInfo-3'}", }, { name: "+Addr-LocalAddr+emptyAuth", peer: &Peer{Addr: &addr{"1.2.3.4:1234"}, AuthInfo: testAuthInfo{credentials.CommonAuthInfo{}}}, want: "Peer{Addr: '1.2.3.4:1234', LocalAddr: , AuthInfo: 'testAuthInfo-0'}", }, { name: "-Addr-LocalAddr+emptyAuth", peer: &Peer{AuthInfo: testAuthInfo{}}, want: "Peer{Addr: , LocalAddr: , AuthInfo: 'testAuthInfo-0'}", }, { name: "zeroedPeer", peer: &Peer{}, want: "Peer{Addr: , LocalAddr: , AuthInfo: }", }, { name: "nilPeer", peer: nil, want: "Peer", }, } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { ctx := NewContext(context.Background(), tc.peer) p, ok := FromContext(ctx) if !ok { t.Fatalf("Unable to get peer from context") } if p.String() != tc.want { t.Fatalf("Error using peer String(): expected %q, got %q", tc.want, p.String()) } }) } }