...
1
18
19 package weightedtarget
20
21 import (
22 "testing"
23
24 "github.com/google/go-cmp/cmp"
25 "google.golang.org/grpc/balancer"
26 _ "google.golang.org/grpc/balancer/grpclb"
27 "google.golang.org/grpc/balancer/roundrobin"
28 internalserviceconfig "google.golang.org/grpc/internal/serviceconfig"
29 )
30
31 const (
32 testJSONConfig = `{
33 "targets": {
34 "cluster_1": {
35 "weight": 75,
36 "childPolicy": [{
37 "grpclb": {
38 "childPolicy": [{"pick_first":{}}],
39 "targetName": "foo-service"
40 }
41 }]
42 },
43 "cluster_2": {
44 "weight": 25,
45 "childPolicy": [{"round_robin": ""}]
46 }
47 }
48 }`
49 )
50
51 var (
52 grpclbConfigParser = balancer.Get("grpclb").(balancer.ConfigParser)
53 grpclbConfigJSON = `{"childPolicy": [{"pick_first":{}}], "targetName": "foo-service"}`
54 grpclbConfig, _ = grpclbConfigParser.ParseConfig([]byte(grpclbConfigJSON))
55 )
56
57 func (s) TestParseConfig(t *testing.T) {
58 tests := []struct {
59 name string
60 js string
61 want *LBConfig
62 wantErr bool
63 }{
64 {
65 name: "empty json",
66 js: "",
67 want: nil,
68 wantErr: true,
69 },
70 {
71 name: "OK",
72 js: testJSONConfig,
73 want: &LBConfig{
74 Targets: map[string]Target{
75 "cluster_1": {
76 Weight: 75,
77 ChildPolicy: &internalserviceconfig.BalancerConfig{
78 Name: "grpclb",
79 Config: grpclbConfig,
80 },
81 },
82 "cluster_2": {
83 Weight: 25,
84 ChildPolicy: &internalserviceconfig.BalancerConfig{
85 Name: roundrobin.Name,
86 },
87 },
88 },
89 },
90 wantErr: false,
91 },
92 }
93 for _, tt := range tests {
94 t.Run(tt.name, func(t *testing.T) {
95 got, err := parseConfig([]byte(tt.js))
96 if (err != nil) != tt.wantErr {
97 t.Fatalf("parseConfig() error = %v, wantErr %v", err, tt.wantErr)
98 }
99 if !cmp.Equal(got, tt.want) {
100 t.Errorf("parseConfig() got unexpected result, diff: %v", cmp.Diff(got, tt.want))
101 }
102 })
103 }
104 }
105
View as plain text