internal/resolver: introduce a new resolver to handle target URI and … · grpc/grpc-go@063d352 (original) (raw)

``

1

`+

/*

`

``

2

`+

`

``

3

`+

`

``

4

`+

`

``

5

`+

`

``

6

`+

`

``

7

`+

`

``

8

`+

`

``

9

`+

`

``

10

`+

`

``

11

`+

`

``

12

`+

`

``

13

`+

`

``

14

`+

`

``

15

`+

`

``

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

`+

}

`