github.com/hxx258456/ccgo@v0.0.5-0.20230213014102-48b35f46f66f/grpc/balancer/weightedtarget/weightedtarget_config_test.go (about) 1 /* 2 * 3 * Copyright 2020 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 weightedtarget 20 21 import ( 22 "testing" 23 24 "github.com/google/go-cmp/cmp" 25 "github.com/hxx258456/ccgo/grpc/balancer" 26 _ "github.com/hxx258456/ccgo/grpc/balancer/grpclb" 27 "github.com/hxx258456/ccgo/grpc/balancer/roundrobin" 28 internalserviceconfig "github.com/hxx258456/ccgo/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 }