| /* | |
| * | |
| * 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" | |
| "time" | |
| "google.golang.org/grpc/credentials" | |
| ) | |
| const defaultTestTimeout = 10 * time.Second | |
| // 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: <nil>, 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: <nil>, AuthInfo: 'testAuthInfo-0'}", | |
| }, | |
| { | |
| name: "-Addr-LocalAddr+emptyAuth", | |
| peer: &Peer{AuthInfo: testAuthInfo{}}, | |
| want: "Peer{Addr: <nil>, LocalAddr: <nil>, AuthInfo: 'testAuthInfo-0'}", | |
| }, | |
| { | |
| name: "zeroedPeer", | |
| peer: &Peer{}, | |
| want: "Peer{Addr: <nil>, LocalAddr: <nil>, AuthInfo: <nil>}", | |
| }, | |
| { | |
| name: "nilPeer", | |
| peer: nil, | |
| want: "Peer<nil>", | |
| }, | |
| } | |
| ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout) | |
| defer cancel() | |
| for _, tc := range testCases { | |
| t.Run(tc.name, func(t *testing.T) { | |
| ctx = NewContext(ctx, 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()) | |
| } | |
| }) | |
| } | |
| } |