google.golang.org/grpc@v1.72.2/internal/proxyattributes/proxyattributes_test.go (about) 1 /* 2 * 3 * Copyright 2024 gRPC authors. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 */ 18 19 package proxyattributes 20 21 import ( 22 "net/url" 23 "testing" 24 25 "google.golang.org/grpc/attributes" 26 "google.golang.org/grpc/internal/grpctest" 27 "google.golang.org/grpc/resolver" 28 ) 29 30 type s struct { 31 grpctest.Tester 32 } 33 34 func Test(t *testing.T) { 35 grpctest.RunSubTests(t, s{}) 36 } 37 38 // Tests that Get returns a valid proxy attribute. 39 func (s) TestGet(t *testing.T) { 40 user := url.UserPassword("username", "password") 41 tests := []struct { 42 name string 43 addr resolver.Address 44 wantConnectAddr string 45 wantUser *url.Userinfo 46 wantAttrPresent bool 47 }{ 48 { 49 name: "connect_address_in_attribute", 50 addr: resolver.Address{ 51 Addr: "test-address", 52 Attributes: attributes.New(proxyOptionsKey, Options{ 53 ConnectAddr: "proxy-address", 54 }), 55 }, 56 wantConnectAddr: "proxy-address", 57 wantAttrPresent: true, 58 }, 59 { 60 name: "user_in_attribute", 61 addr: resolver.Address{ 62 Addr: "test-address", 63 Attributes: attributes.New(proxyOptionsKey, Options{ 64 User: user, 65 }), 66 }, 67 wantUser: user, 68 wantAttrPresent: true, 69 }, 70 { 71 name: "no_attribute", 72 addr: resolver.Address{Addr: "test-address"}, 73 wantAttrPresent: false, 74 }, 75 } 76 77 for _, tt := range tests { 78 t.Run(tt.name, func(t *testing.T) { 79 gotOption, attrPresent := Get(tt.addr) 80 if attrPresent != tt.wantAttrPresent { 81 t.Errorf("Get(%v) = %v, want %v", tt.addr, attrPresent, tt.wantAttrPresent) 82 } 83 84 if gotOption.ConnectAddr != tt.wantConnectAddr { 85 t.Errorf("ConnectAddr(%v) = %v, want %v", tt.addr, gotOption.ConnectAddr, tt.wantConnectAddr) 86 } 87 88 if gotOption.User != tt.wantUser { 89 t.Errorf("User(%v) = %v, want %v", tt.addr, gotOption.User, tt.wantUser) 90 } 91 }) 92 } 93 } 94 95 // Tests that Set returns a copy of addr with attributes containing correct 96 // user and connect address. 97 func (s) TestSet(t *testing.T) { 98 addr := resolver.Address{Addr: "test-address"} 99 pOpts := Options{ 100 User: url.UserPassword("username", "password"), 101 ConnectAddr: "proxy-address", 102 } 103 104 // Call Set and validate attributes 105 populatedAddr := Set(addr, pOpts) 106 gotOption, attrPresent := Get(populatedAddr) 107 if !attrPresent { 108 t.Errorf("Get(%v) = %v, want %v ", populatedAddr, attrPresent, true) 109 } 110 if got, want := gotOption.ConnectAddr, pOpts.ConnectAddr; got != want { 111 t.Errorf("unexpected ConnectAddr proxy atrribute = %v, want %v", got, want) 112 } 113 if got, want := gotOption.User, pOpts.User; got != want { 114 t.Errorf("unexpected User proxy attribute = %v, want %v", got, want) 115 } 116 }