diff --git a/cmd/care.go b/cmd/care.go index d20272b..f93d194 100644 --- a/cmd/care.go +++ b/cmd/care.go @@ -38,7 +38,7 @@ func init() { // and all subcommands, e.g.: // careCmd.PersistentFlags().String("foo", "", "A help for foo") careCmd.Flags().BoolVar(&care.LVS.RunOnce, "run-once", false, "is run once mode") - careCmd.Flags().StringVar(&care.LVS.VirtualServer, "vs", "", "virturl server like 10.54.0.2:6443") + careCmd.Flags().StringVar(&care.LVS.VirtualServer, "vs", "", "virtual server like 10.54.0.2:6443") careCmd.Flags().StringSliceVar(&care.LVS.RealServer, "rs", []string{}, "real server like 192.168.0.2:6443") careCmd.Flags().StringVar(&care.LVS.Logger, "logger", "INFO", "logger level: DEBG/INFO") careCmd.Flags().BoolVar(&care.LVS.Clean, "clean", false, "before run clean ipvs rules") diff --git a/service/service.go b/service/service.go index e3c74b9..b40751a 100644 --- a/service/service.go +++ b/service/service.go @@ -19,8 +19,7 @@ type EndPoint struct { } func (ep EndPoint) String() string { - port := strconv.Itoa(int(ep.Port)) - return ep.IP + ":" + port + return net.JoinHostPort(ep.IP, strconv.Itoa(int(ep.Port))) } //Lvser is diff --git a/utils/utils.go b/utils/utils.go index cb37317..360aa1f 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -8,23 +8,24 @@ import ( "net" "net/http" "strconv" - "strings" ) //SplitServer is func SplitServer(server string) (string, uint16) { - s := strings.Split(server, ":") - if len(s) != 2 { - glog.Warning("SplitServer error: len(s) is not two.") + glog.V(8).Infof("server %s", server) + + ip, port, err := net.SplitHostPort(server) + if err != nil { + glog.Errorf("SplitServer error: %v.", err) return "", 0 } - glog.V(8).Infof("SplitServer debug: IP: %s, Port: %s", s[0], s[1]) - p, err := strconv.Atoi(s[1]) + glog.V(8).Infof("SplitServer debug: IP: %s, Port: %s", ip, port) + p, err := strconv.Atoi(port) if err != nil { glog.Warningf("SplitServer error: %v", err) return "", 0 } - return s[0], uint16(p) + return ip, uint16(p) } //IsHTTPAPIHealth is check http error @@ -33,7 +34,7 @@ func IsHTTPAPIHealth(ip, port, path, schem string) bool { url := fmt.Sprintf("%s://%s:%s%s", schem, ip, port, path) resp, err := http.Get(url) if err != nil { - glog.V(8).Infof("IsHTTPAPIHealth error: ", err) + glog.V(8).Infof("IsHTTPAPIHealth error: %v", err) return false } defer resp.Body.Close() diff --git a/utils/utils_test.go b/utils/utils_test.go new file mode 100644 index 0000000..1ce0055 --- /dev/null +++ b/utils/utils_test.go @@ -0,0 +1,49 @@ +// alibaba-inc.com Inc. +// Copyright (c) 2004-2022 All Rights Reserved. +// +// @Author : huaiyou.cyz +// @Time : 2022/5/25 4:08 PM +// @File : utils_test.go +// + +package utils + +import "testing" + +func TestSplitServer(t *testing.T) { + type args struct { + server string + } + tests := []struct { + name string + args args + want string + want1 uint16 + }{ + { + args: args{ + server: "[1408:4003:10bb:6a01:83b9:6360:c66d:ed3e]:6443", + }, + want: "1408:4003:10bb:6a01:83b9:6360:c66d:ed3e", + want1: 6443, + }, + { + args: args{ + server: "1.1.1.1:6443", + }, + want: "1.1.1.1", + want1: 6443, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, got1 := SplitServer(tt.args.server) + if got != tt.want { + t.Errorf("SplitServer() got = %v, want %v", got, tt.want) + } + if got1 != tt.want1 { + t.Errorf("SplitServer() got1 = %v, want %v", got1, tt.want1) + } + }) + } +}