This is an automated email from the ASF dual-hosted git repository.

tianxiaoliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-mesher.git


The following commit(s) were added to refs/heads/master by this push:
     new 182828d  修改mesher适配最新的go-chassis (#118)
182828d is described below

commit 182828d3f1f5db98fa4951296ad458aaf71bd104
Author: t-xinlin <[email protected]>
AuthorDate: Mon May 25 11:09:42 2020 +0800

    修改mesher适配最新的go-chassis (#118)
    
    * Remove ratelimiter handler
    
    * Add unit test for bootstrap
    
    * 修改bootstrap适配新的go-chassis
    
    * 修改go.mod适配新的go-chassis
    
    * UPdate travis.yaml
    
    * golint change
    
    * Fix: GoSecure Checker
    
    * Fix: travis.yam;
    
    * Fix bootstrap unit test
    
    * Fix: rm unused package
    
    * Fix: unit test error
    
    * Add unit test to dubbo protocl and http protocol modile.
    
    * Fix: 日志打印.
    
    Co-authored-by: “[email protected] <Happy100>
---
 .travis.yml                                        |   6 +-
 cmd/mesher/mesher.go                               |   3 +
 go.mod                                             |   4 +-
 proxy/bootstrap/bootstrap.go                       |   8 +-
 proxy/bootstrap/bootstrap_test.go                  | 133 +++++++++++++++++++++
 proxy/config/config.go                             |   5 +-
 proxy/handler/port_rewrite.go                      |   5 +-
 proxy/handler/skywalking_handler.go                |  10 +-
 proxy/pkg/egress/archaius/egress_manager.go        |  11 +-
 proxy/pkg/egress/egress_test.go                    |   1 +
 proxy/protocol/dubbo/client/client_conn.go         |  15 ++-
 .../protocol/dubbo/client/dubbo_client_test.go     |  39 +++---
 proxy/protocol/dubbo/dubbo/request_test.go         |  79 ++++++++++++
 proxy/protocol/dubbo/proxy/dubbo_proxy_ouput.go    |   3 +-
 proxy/protocol/dubbo/proxy/rest2dubbo.go           |  25 +++-
 proxy/protocol/dubbo/server/server.go              |   5 +-
 proxy/protocol/http/gateway_test.go                |   2 +-
 proxy/protocol/http/sidecar.go                     |   5 +-
 proxy/protocol/http/sidercar_test.go               |  95 +++++++++++++++
 proxy/resource/v1/route.go                         |  11 +-
 proxy/resource/v1/status.go                        |  17 ++-
 proxy/server/server.go                             |  19 ++-
 22 files changed, 434 insertions(+), 67 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 53e9d90..6a56d3c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,7 +1,7 @@
 language: go
 sudo: required
 go:
-  - 1.11
+  - 1.14.2
 install: true
 
 services:
@@ -35,7 +35,7 @@ jobs:
         - bash -x scripts/travis/goConstChecker.sh
     - stage: GoLint Checker
       script:
-        - go get -u github.com/golang/lint/golint
+        - go get -u golang.org/x/lint/golint
         - bash -x scripts/travis/goLintChecker.sh
     - stage: GoCyclo Checker
       script:
@@ -48,13 +48,11 @@ jobs:
     - stage: Build
       script: 
         - GO111MODULE=on go mod download
-        - GO111MODULE=on go mod vendor
         - go build github.com/apache/servicecomb-mesher/cmd/mesher
     - stage: Unit Test
       script:
         - go get github.com/mattn/goveralls
         - go get golang.org/x/tools/cmd/cover
         - GO111MODULE=on go mod download
-        - GO111MODULE=on go mod vendor
         - bash -x scripts/travis/unit_test.sh && $HOME/gopath/bin/goveralls 
-coverprofile=coverage.txt -service=travis-ci
 
diff --git a/cmd/mesher/mesher.go b/cmd/mesher/mesher.go
index 2e062e8..8c05b6a 100644
--- a/cmd/mesher/mesher.go
+++ b/cmd/mesher/mesher.go
@@ -38,6 +38,9 @@ import (
        _ "github.com/apache/servicecomb-mesher/proxy/handler/oauth2"
 
        _ "github.com/go-chassis/go-chassis/middleware/circuit"
+
+       // rate limiter handler
+       _ "github.com/go-chassis/go-chassis/middleware/ratelimiter"
 )
 
 func main() {
diff --git a/go.mod b/go.mod
index a5a1f5b..c4ca0c0 100644
--- a/go.mod
+++ b/go.mod
@@ -4,8 +4,8 @@ require (
        github.com/envoyproxy/go-control-plane v0.6.0
        github.com/ghodss/yaml v1.0.0
        github.com/go-chassis/foundation v0.1.1-0.20191113114104-2b05871e9ec4
-       github.com/go-chassis/go-archaius v1.2.1-0.20200309104817-8c3d4e87d33c
-       github.com/go-chassis/go-chassis v1.8.2-0.20200317131017-6cbcbc9ae9e6
+       github.com/go-chassis/go-archaius v1.3.0
+       github.com/go-chassis/go-chassis v1.8.2-0.20200505090058-f61a697f667a
        github.com/go-chassis/gohessian v0.0.0-20180702061429-e5130c25af55
        github.com/go-mesh/openlogging v1.0.1
        github.com/gogo/googleapis v1.3.1 // indirect
diff --git a/proxy/bootstrap/bootstrap.go b/proxy/bootstrap/bootstrap.go
index 8a397ff..5295043 100644
--- a/proxy/bootstrap/bootstrap.go
+++ b/proxy/bootstrap/bootstrap.go
@@ -55,7 +55,9 @@ func Start() error {
        if err := DecideMode(); err != nil {
                return err
        }
-       metrics.Init()
+       if err := metrics.Init(); err != nil {
+               lager.Logger.Infof("metrics init error", err)
+       }
        if err := v1.Init(); err != nil {
                log.Println("Error occurred in starting admin server", err)
        }
@@ -113,7 +115,7 @@ func GetVersion() string {
 func SetHandlers() {
        consumerChain := strings.Join([]string{
                chassisHandler.Router,
-               chassisHandler.RateLimiterConsumer,
+               "ratelimiter-consumer",
                "bizkeeper-consumer",
                chassisHandler.Loadbalance,
                chassisHandler.Transport,
@@ -136,7 +138,7 @@ func SetHandlers() {
 //InitEgressChain init the egress handler chain
 func InitEgressChain() error {
        egresschain := strings.Join([]string{
-               handler.RateLimiterConsumer,
+               "ratelimiter-consumer",
                handler.Transport,
        }, ",")
 
diff --git a/proxy/bootstrap/bootstrap_test.go 
b/proxy/bootstrap/bootstrap_test.go
new file mode 100644
index 0000000..e853751
--- /dev/null
+++ b/proxy/bootstrap/bootstrap_test.go
@@ -0,0 +1,133 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package bootstrap
+
+import (
+       "github.com/apache/servicecomb-mesher/proxy/cmd"
+       "github.com/apache/servicecomb-mesher/proxy/common"
+       _ "github.com/apache/servicecomb-mesher/proxy/pkg/egress/archaius"
+       "github.com/go-chassis/go-archaius"
+       "github.com/go-chassis/go-chassis/core/config"
+       "github.com/go-chassis/go-chassis/core/config/model"
+       "github.com/go-chassis/go-chassis/core/lager"
+       "github.com/go-chassis/go-chassis/pkg/util/fileutil"
+       "github.com/stretchr/testify/assert"
+       "io"
+       "os"
+       "path/filepath"
+       "sync"
+       "testing"
+       // rate limiter handler
+       _ "github.com/go-chassis/go-chassis/middleware/ratelimiter"
+)
+
+var o sync.Once = sync.Once{}
+
+var yamlContent = `---
+egress:
+  infra: cse # pilot or cse
+  address: http://istio-pilot.istio-system:15010
+egressRule:
+  google-ext:
+    - hosts:
+        - "www.google.com"
+        - "*.yahoo.com"
+      ports:
+        - port: 80
+          protocol: HTTP
+  facebook-ext:
+    - hosts:
+        - "www.facebook.com"
+      ports:
+        - port: 80
+          protocol: HTTP`
+
+func TestBootstrap(t *testing.T) {
+       lager.Init(&lager.Options{LoggerLevel: "DEBUG"})
+
+       // init work dir
+       os.Setenv(fileutil.ChassisHome, filepath.Join("...", "..."))
+       os.Setenv(fileutil.ChassisConfDir, filepath.Join("...", "...", "conf"))
+       t.Log(os.Getenv("CHASSIS_HOME"))
+
+       // init archaius
+       archaius.Init(archaius.WithENVSource())
+
+       //ini config
+       config.Init()
+
+       protoMap := make(map[string]model.Protocol)
+       protoMap["http"] = model.Protocol{
+               Listen: "127.0.0.1:90909",
+       }
+       config.GlobalDefinition = &model.GlobalCfg{
+               Cse: model.CseStruct{
+                       Protocols: protoMap,
+               },
+       }
+
+       configMesher := "../../conf/mesher.yaml"
+       os.Args = []string{"test", "--config", configMesher}
+       if err := cmd.Init(); err != nil {
+               panic(err)
+       }
+       if err := cmd.Configs.GeneratePortsMap(); err != nil {
+               panic(err)
+       }
+
+       // init egress.yaml file
+       d, _ := os.Getwd()
+       os.Mkdir(filepath.Join(d, "conf"), os.ModePerm)
+       filename := filepath.Join(d, "conf", "egress.yaml")
+       os.Remove(filename)
+       f1, err := os.Create(filename)
+       assert.NoError(t, err)
+       defer f1.Close()
+       _, err = io.WriteString(f1, yamlContent)
+       assert.NoError(t, err)
+
+       t.Run("Test RegisterFramework", func(t *testing.T) {
+               // case cmd.Configs.Role is empty
+               cmd.Configs.Role = ""
+               RegisterFramework()
+               // case cmd.Configs.Role == common.RoleSidecar
+               cmd.Configs.Role = common.RoleSidecar
+               RegisterFramework()
+       })
+
+       t.Run("Test Start", func(t *testing.T) {
+               // case Protocols is empty
+               config.GlobalDefinition.Cse.Protocols = 
map[string]model.Protocol{}
+               err := Start()
+               assert.Error(t, err)
+
+               // cmd.Configs.LocalServicePorts = "http:9090"
+               cmd.Configs.LocalServicePorts = "http:9090"
+               err = Start()
+
+               cmd.Configs.LocalServicePorts = ""
+               RegisterFramework()
+               SetHandlers()
+               err = InitEgressChain()
+               assert.NoError(t, err)
+
+               err = Start()
+               assert.NoError(t, err)
+
+       })
+}
diff --git a/proxy/config/config.go b/proxy/config/config.go
index 07ceef1..1c05f57 100644
--- a/proxy/config/config.go
+++ b/proxy/config/config.go
@@ -146,7 +146,10 @@ func SetKeyValueByFile(key, f string) string {
                return ""
        }
        contents = string(b)
-       archaius.Set(key, contents)
+       err = archaius.Set(key, contents)
+       if err != nil {
+               lager.Logger.Error("Archaius set error: " + err.Error())
+       }
        return contents
 }
 
diff --git a/proxy/handler/port_rewrite.go b/proxy/handler/port_rewrite.go
index 2555275..e00e0eb 100644
--- a/proxy/handler/port_rewrite.go
+++ b/proxy/handler/port_rewrite.go
@@ -45,7 +45,10 @@ func (ps *PortSelectionHandler) Handle(chain *handler.Chain, 
inv *invocation.Inv
                r := &invocation.Response{
                        Err: err,
                }
-               cb(r)
+
+               if err := cb(r); err != nil {
+                       openlogging.Error("Response callBack error: " + 
err.Error())
+               }
                return
        }
 
diff --git a/proxy/handler/skywalking_handler.go 
b/proxy/handler/skywalking_handler.go
index afaaec5..c0006d8 100644
--- a/proxy/handler/skywalking_handler.go
+++ b/proxy/handler/skywalking_handler.go
@@ -117,6 +117,12 @@ func NewSkyWalkingConsumer() handler.Handler {
 }
 
 func init() {
-       handler.RegisterHandler(skywalking.SkyWalkingProvider, 
NewSkyWalkingProvier)
-       handler.RegisterHandler(skywalking.SkyWalkingConsumer, 
NewSkyWalkingConsumer)
+       err := handler.RegisterHandler(skywalking.SkyWalkingProvider, 
NewSkyWalkingProvier)
+       if err != nil {
+               openlogging.GetLogger().Errorf("Handler [%s] register error: ", 
skywalking.SkyWalkingProvider, err.Error())
+       }
+       err = handler.RegisterHandler(skywalking.SkyWalkingConsumer, 
NewSkyWalkingConsumer)
+       if err != nil {
+               openlogging.GetLogger().Errorf("Handler [%s] register error: ", 
skywalking.SkyWalkingConsumer, err.Error())
+       }
 }
diff --git a/proxy/pkg/egress/archaius/egress_manager.go 
b/proxy/pkg/egress/archaius/egress_manager.go
index eac986c..fb16c41 100644
--- a/proxy/pkg/egress/archaius/egress_manager.go
+++ b/proxy/pkg/egress/archaius/egress_manager.go
@@ -76,8 +76,13 @@ func (r *egressRuleEventListener) Event(e *event.Event) {
 // initialize the config mgr and add several sources
 func initEgressManager() error {
        egressListener := &egressRuleEventListener{}
-       archaius.AddFile(filepath.Join(fileutil.GetConfDir(), EgressYaml), 
archaius.WithFileHandler(util.UseFileNameAsKeyContentAsValue))
-       archaius.RegisterListener(egressListener, ".*")
-
+       err := archaius.AddFile(filepath.Join(fileutil.GetConfDir(), 
EgressYaml), archaius.WithFileHandler(util.UseFileNameAsKeyContentAsValue))
+       if err != nil {
+               lager.Logger.Infof("Archaius add file failed: ", err)
+       }
+       err = archaius.RegisterListener(egressListener, ".*")
+       if err != nil {
+               lager.Logger.Infof("Archaius add file failed: ", err)
+       }
        return nil
 }
diff --git a/proxy/pkg/egress/egress_test.go b/proxy/pkg/egress/egress_test.go
index 05b70e8..850f77f 100644
--- a/proxy/pkg/egress/egress_test.go
+++ b/proxy/pkg/egress/egress_test.go
@@ -32,6 +32,7 @@ import (
        "github.com/apache/servicecomb-mesher/proxy/pkg/egress"
        "github.com/apache/servicecomb-mesher/proxy/pkg/egress/archaius"
        "github.com/go-chassis/go-chassis/control"
+       _ "github.com/go-chassis/go-chassis/control/servicecomb"
        "github.com/go-chassis/go-chassis/core/config"
        "github.com/go-chassis/go-chassis/core/lager"
        "gopkg.in/yaml.v2"
diff --git a/proxy/protocol/dubbo/client/client_conn.go 
b/proxy/protocol/dubbo/client/client_conn.go
index 5df4707..4f0c0d0 100644
--- a/proxy/protocol/dubbo/client/client_conn.go
+++ b/proxy/protocol/dubbo/client/client_conn.go
@@ -77,7 +77,10 @@ type DubboClientConnection struct {
 //NewDubboClientConnetction is a function which create new dubbo client 
connection
 func NewDubboClientConnetction(conn *net.TCPConn, client *DubboClient, 
routineMgr *util.RoutineManager) *DubboClientConnection {
        tmp := new(DubboClientConnection)
-       conn.SetKeepAlive(true)
+       err := conn.SetKeepAlive(true)
+       if err != nil {
+               lager.Logger.Error("TCPConn SetKeepAlive error:" + err.Error())
+       }
        tmp.conn = conn
        tmp.codec = dubbo.DubboCodec{}
        tmp.client = client
@@ -104,7 +107,10 @@ func (this *DubboClientConnection) Close() {
        }
        this.closed = true
        this.msgque.Deavtive()
-       this.conn.Close()
+       err := this.conn.Close()
+       if err != nil {
+               lager.Logger.Error("Dubbo client connection close error:" + 
err.Error())
+       }
 }
 
 //MsgRecvLoop is a method which receives message
@@ -174,7 +180,10 @@ func (this *DubboClientConnection) HandleMsg(rsp 
*dubbo.DubboRsp) {
 //SendMsg is a method which send a request
 func (this *DubboClientConnection) SendMsg(req *dubbo.Request) {
        //这里发送Rest请求以及收发送应答
-       this.msgque.Enqueue(req)
+       err := this.msgque.Enqueue(req)
+       if err != nil {
+               lager.Logger.Error("Msg Enqueue:" + err.Error())
+       }
 }
 
 //MsgSndLoop is a method which send data
diff --git a/cmd/mesher/mesher.go 
b/proxy/protocol/dubbo/client/dubbo_client_test.go
similarity index 51%
copy from cmd/mesher/mesher.go
copy to proxy/protocol/dubbo/client/dubbo_client_test.go
index 2e062e8..3fb9fec 100644
--- a/cmd/mesher/mesher.go
+++ b/proxy/protocol/dubbo/client/dubbo_client_test.go
@@ -15,31 +15,26 @@
  * limitations under the License.
  */
 
-package main
+package dubboclient
 
 import (
-       _ "net/http/pprof"
+       "testing"
+       "time"
 
-       _ "github.com/apache/servicecomb-mesher/proxy/resolver/authority"
-
-       _ "github.com/apache/servicecomb-mesher/proxy/handler"
-       //protocols
-       _ "github.com/apache/servicecomb-mesher/proxy/protocol/grpc"
-       _ "github.com/apache/servicecomb-mesher/proxy/protocol/http"
-       //ingress rule fetcher
-       _ "github.com/apache/servicecomb-mesher/proxy/ingress/servicecomb"
-       "github.com/apache/servicecomb-mesher/proxy/server"
-
-       _ "github.com/apache/servicecomb-mesher/proxy/pkg/egress/archaius"
-       _ "github.com/apache/servicecomb-mesher/proxy/pkg/egress/pilot"
-
-       _ "github.com/apache/servicecomb-mesher/proxy/control/istio"
-
-       _ "github.com/apache/servicecomb-mesher/proxy/handler/oauth2"
-
-       _ "github.com/go-chassis/go-chassis/middleware/circuit"
+       "github.com/go-chassis/go-chassis/core/lager"
+       "github.com/stretchr/testify/assert"
 )
 
-func main() {
-       server.Run()
+func init() {
+       lager.Init(&lager.Options{
+               LoggerLevel:   "INFO",
+               RollingPolicy: "size",
+       })
+}
+
+func TestClientMgr_GetClient(t *testing.T) {
+       clientMgr := NewClientMgr()
+       c, err := clientMgr.GetClient("127.0.0.1:30101", time.Second*5)
+       assert.Error(t, err)
+       assert.Nil(t, c)
 }
diff --git a/proxy/protocol/dubbo/dubbo/request_test.go 
b/proxy/protocol/dubbo/dubbo/request_test.go
new file mode 100644
index 0000000..53a4c39
--- /dev/null
+++ b/proxy/protocol/dubbo/dubbo/request_test.go
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dubbo
+
+import (
+       "testing"
+
+       "github.com/stretchr/testify/assert"
+)
+
+func TestGenerateMsgID(t *testing.T) {
+       assert.Equal(t, int64(1), GenerateMsgID())
+       assert.Equal(t, int64(2), GenerateMsgID())
+       assert.Equal(t, int64(3), GenerateMsgID())
+}
+
+func Test_Request(t *testing.T) {
+       req := NewDubboRequest()
+
+       // broken
+       req.SetBroken(true)
+       assert.Equal(t, true, req.IsBroken())
+
+       // data
+       req.SetData("info")
+       assert.Equal(t, "info", req.GetData())
+
+       // msg id
+       req.SetMsgID(int64(101))
+       assert.Equal(t, int64(101), req.GetMsgID())
+
+       // status
+       assert.Equal(t, Ok, req.GetStatus())
+
+       // event
+       req.SetEvent("event happend")
+       assert.Equal(t, true, req.IsEvent())
+
+       // twoway
+       req.SetTwoWay(false)
+       assert.Equal(t, false, req.IsTwoWay())
+
+       // version
+       req.SetVersion("1.0.0")
+       assert.Equal(t, "1.0.0", req.mVersion)
+
+       // Attachments
+       m := make(map[string]string)
+       m["key_01"] = "value_01"
+       m["key_02"] = "value_02"
+       m["key_03"] = "value_03"
+
+       req.SetAttachments(m)
+       attch := req.GetAttachments()
+       assert.NotNil(t, attch)
+       assert.Equal(t, "value_03", attch["key_03"])
+       assert.Equal(t, "value_03", req.GetAttachment("key_03", "defaultValue"))
+       assert.Equal(t, "defaultValue", req.GetAttachment("key_04", 
"defaultValue"))
+
+       // method name
+       req.SetMethodName("methodname")
+       assert.Equal(t, "methodname", req.GetMethodName())
+
+}
diff --git a/proxy/protocol/dubbo/proxy/dubbo_proxy_ouput.go 
b/proxy/protocol/dubbo/proxy/dubbo_proxy_ouput.go
index a6c2bfc..48bee85 100755
--- a/proxy/protocol/dubbo/proxy/dubbo_proxy_ouput.go
+++ b/proxy/protocol/dubbo/proxy/dubbo_proxy_ouput.go
@@ -22,7 +22,6 @@ import (
        "encoding/json"
        "fmt"
        "github.com/apache/servicecomb-mesher/proxy/cmd"
-       stringutil "github.com/go-chassis/foundation/string"
        "net/http"
        "net/url"
 
@@ -42,7 +41,7 @@ import (
        "github.com/go-chassis/go-chassis/core/lager"
        "github.com/go-chassis/go-chassis/core/loadbalancer"
        "github.com/go-chassis/go-chassis/pkg/runtime"
-       "github.com/go-chassis/go-chassis/pkg/string"
+       stringutil "github.com/go-chassis/go-chassis/pkg/string"
        "github.com/go-chassis/go-chassis/pkg/util/httputil"
        "github.com/go-chassis/go-chassis/pkg/util/tags"
        
"github.com/go-chassis/go-chassis/third_party/forked/afex/hystrix-go/hystrix"
diff --git a/proxy/protocol/dubbo/proxy/rest2dubbo.go 
b/proxy/protocol/dubbo/proxy/rest2dubbo.go
index 0ccdef9..ade84d9 100755
--- a/proxy/protocol/dubbo/proxy/rest2dubbo.go
+++ b/proxy/protocol/dubbo/proxy/rest2dubbo.go
@@ -53,7 +53,9 @@ func ConvertDubboRspToRestRsp(dubboRsp *dubbo.DubboRsp, w 
http.ResponseWriter, c
                        if err != nil {
                                w.WriteHeader(http.StatusInternalServerError)
                        } else {
-                               w.Write([]byte(v))
+                               if _, err := w.Write([]byte(v)); err != nil {
+                                       return err
+                               }
                        }
                } else {
                        w.WriteHeader(http.StatusInternalServerError)
@@ -202,6 +204,7 @@ func TransparentForwardHandler(w http.ResponseWriter, r 
*http.Request) {
 
 func handleRequestForDubbo(w http.ResponseWriter, inv *invocation.Invocation, 
ir *invocation.Response) error {
        if ir != nil {
+               var err error
                if ir.Err != nil {
                        switch ir.Err.(type) {
                        case hystrix.FallbackNullError:
@@ -210,27 +213,37 @@ func handleRequestForDubbo(w http.ResponseWriter, inv 
*invocation.Invocation, ir
                        case hystrix.CircuitError:
                                w.WriteHeader(http.StatusServiceUnavailable)
                                ir.Status = http.StatusServiceUnavailable
-                               w.Write([]byte(ir.Err.Error()))
+                               _, err = w.Write([]byte(ir.Err.Error()))
                        case loadbalancer.LBError:
                                w.WriteHeader(http.StatusBadGateway)
                                ir.Status = http.StatusBadGateway
-                               w.Write([]byte(ir.Err.Error()))
+                               _, err = w.Write([]byte(ir.Err.Error()))
                        default:
                                w.WriteHeader(http.StatusInternalServerError)
                                ir.Status = http.StatusInternalServerError
-                               w.Write([]byte(ir.Err.Error()))
+                               _, err = w.Write([]byte(ir.Err.Error()))
                        }
+                       if err != nil {
+                               return err
+                       }
+
                        return ir.Err
                }
                if inv.Endpoint == "" {
                        w.WriteHeader(http.StatusInternalServerError)
                        ir.Status = http.StatusInternalServerError
-                       w.Write([]byte(protocol.ErrUnknown.Error()))
+                       _, err = w.Write([]byte(protocol.ErrUnknown.Error()))
+                       if err != nil {
+                               return err
+                       }
                        return protocol.ErrUnknown
                }
        } else {
                w.WriteHeader(http.StatusInternalServerError)
-               
w.Write([]byte(protocol.ErrUnExpectedHandlerChainResponse.Error()))
+               _, err := 
w.Write([]byte(protocol.ErrUnExpectedHandlerChainResponse.Error()))
+               if err != nil {
+                       return err
+               }
                return protocol.ErrUnExpectedHandlerChainResponse
        }
 
diff --git a/proxy/protocol/dubbo/server/server.go 
b/proxy/protocol/dubbo/server/server.go
index 7fd8942..9f7063d 100644
--- a/proxy/protocol/dubbo/server/server.go
+++ b/proxy/protocol/dubbo/server/server.go
@@ -199,5 +199,8 @@ func initSchema() {
                m[inter] = string(b)
        }
 
-       schema.SetSchemaInfoByMap(m)
+       err := schema.SetSchemaInfoByMap(m)
+       if err != nil {
+               openlogging.Error("Set schemaInfo failed: " + err.Error())
+       }
 }
diff --git a/proxy/protocol/http/gateway_test.go 
b/proxy/protocol/http/gateway_test.go
index c27930b..2b0b6e3 100644
--- a/proxy/protocol/http/gateway_test.go
+++ b/proxy/protocol/http/gateway_test.go
@@ -6,7 +6,7 @@ import (
        "github.com/apache/servicecomb-mesher/proxy/pkg/metrics"
        "github.com/go-chassis/go-archaius"
        "github.com/go-chassis/go-chassis/control"
-       _ "github.com/go-chassis/go-chassis/control/archaius"
+       _ "github.com/go-chassis/go-chassis/control/servicecomb"
        "github.com/go-chassis/go-chassis/core/common"
        "github.com/go-chassis/go-chassis/core/config"
        "github.com/go-chassis/go-chassis/core/config/model"
diff --git a/proxy/protocol/http/sidecar.go b/proxy/protocol/http/sidecar.go
index a6e1b1d..4b3a3ad 100755
--- a/proxy/protocol/http/sidecar.go
+++ b/proxy/protocol/http/sidecar.go
@@ -221,7 +221,10 @@ func copyChassisResp2HttpResp(w http.ResponseWriter, resp 
*http.Response) {
        if err != nil {
                openlogging.Error("can not copy: " + err.Error())
        }
-       resp.Body.Close()
+       err = resp.Body.Close()
+       if err != nil {
+               openlogging.Error("Http response close error: " + err.Error())
+       }
 }
 func handleRequest(w http.ResponseWriter, inv *invocation.Invocation, ir 
*invocation.Response) (*http.Response, error) {
        if ir != nil {
diff --git a/proxy/protocol/http/sidercar_test.go 
b/proxy/protocol/http/sidercar_test.go
new file mode 100644
index 0000000..3a37432
--- /dev/null
+++ b/proxy/protocol/http/sidercar_test.go
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package http
+
+import (
+       "bytes"
+       "github.com/apache/servicecomb-mesher/proxy/cmd"
+       "github.com/go-chassis/go-chassis/client/rest"
+       "github.com/go-chassis/go-chassis/core/common"
+       "github.com/go-chassis/go-chassis/core/handler"
+       "io/ioutil"
+       "net/http"
+       "net/http/httptest"
+       "strings"
+       "testing"
+
+       "github.com/apache/servicecomb-mesher/proxy/pkg/metrics"
+       "github.com/go-chassis/go-chassis/core/lager"
+)
+
+func init() {
+       lager.Init(&lager.Options{
+               LoggerLevel:   "INFO",
+               RollingPolicy: "size",
+       })
+
+       cmd.Init()
+
+       metrics.Init()
+
+}
+
+func TestLocalRequestHandler(t *testing.T) {
+       svr := httptest.NewServer(http.HandlerFunc(LocalRequestHandler))
+       api := svr.URL
+       rsp, err := http.Get(api)
+       if err != nil {
+               return
+       }
+       defer rsp.Body.Close()
+}
+
+func TestRemoteRequestHandler(t *testing.T) {
+       handler.CreateChains(
+               common.Provider, map[string]string{
+                       "incoming": strings.Join([]string{}, ","),
+               },
+       )
+
+       handler.CreateChains(
+               common.Consumer, map[string]string{
+                       "outgoing": strings.Join([]string{}, ","),
+               },
+       )
+
+       svr := httptest.NewServer(http.HandlerFunc(RemoteRequestHandler))
+       api := svr.URL
+       rsp, err := http.Get(api)
+       if err != nil {
+               return
+       }
+       defer rsp.Body.Close()
+}
+
+func TestCopyChassisResp2HttpResp(t *testing.T) {
+       svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, 
r *http.Request) {
+               resp := rest.NewResponse()
+               resp.StatusCode = 200
+               b, _ := ioutil.ReadAll(r.Body)
+               resp.Body = ioutil.NopCloser(bytes.NewBuffer(b))
+               copyChassisResp2HttpResp(w, resp)
+
+       }))
+       api := svr.URL
+       rsp, err := http.Get(api)
+       if err != nil {
+               return
+       }
+       defer rsp.Body.Close()
+}
diff --git a/proxy/resource/v1/route.go b/proxy/resource/v1/route.go
index fc16b6c..7c264a4 100644
--- a/proxy/resource/v1/route.go
+++ b/proxy/resource/v1/route.go
@@ -19,6 +19,7 @@ package v1
 
 import (
        "fmt"
+       "github.com/go-mesh/openlogging"
        "net/http"
 
        "github.com/go-chassis/go-chassis/core/common"
@@ -34,10 +35,16 @@ func (a *RouteResource) RouteRuleByService(context 
*restful.Context) {
        serviceName := context.ReadPathParameter("serviceName")
        routeRule := 
router.DefaultRouter.FetchRouteRuleByServiceName(serviceName)
        if routeRule == nil {
-               context.WriteHeaderAndJSON(http.StatusNotFound, fmt.Sprintf("%s 
routeRule not found", serviceName), common.JSON)
+               err := context.WriteHeaderAndJSON(http.StatusNotFound, 
fmt.Sprintf("%s routeRule not found", serviceName), common.JSON)
+               if err != nil {
+                       openlogging.Error(fmt.Sprintf("Write HeaderAndJSON 
error %s: ", err.Error()))
+               }
                return
        }
-       context.WriteHeaderAndJSON(http.StatusOK, routeRule, "text/vnd.yaml")
+       err := context.WriteHeaderAndJSON(http.StatusOK, routeRule, 
"text/vnd.yaml")
+       if err != nil {
+               openlogging.Error(fmt.Sprintf("Write HeaderAndJSON error %s: ", 
err.Error()))
+       }
 }
 
 //URLPatterns helps to respond for  Admin API calls
diff --git a/proxy/resource/v1/status.go b/proxy/resource/v1/status.go
index feb1181..34dcec7 100644
--- a/proxy/resource/v1/status.go
+++ b/proxy/resource/v1/status.go
@@ -18,11 +18,13 @@
 package v1
 
 import (
+       "fmt"
        "github.com/apache/servicecomb-mesher/proxy/resource/v1/health"
        "github.com/apache/servicecomb-mesher/proxy/resource/v1/version"
        "github.com/go-chassis/go-chassis/core/common"
        "github.com/go-chassis/go-chassis/pkg/metrics"
        "github.com/go-chassis/go-chassis/server/restful"
+       "github.com/go-mesh/openlogging"
        "github.com/prometheus/client_golang/prometheus/promhttp"
        "net/http"
 )
@@ -34,10 +36,16 @@ type StatusResource struct{}
 func (a *StatusResource) Health(context *restful.Context) {
        healthResp := health.GetMesherHealth()
        if healthResp.Status == health.Red {
-               context.WriteHeaderAndJSON(http.StatusInternalServerError, 
healthResp, common.JSON)
+               err := 
context.WriteHeaderAndJSON(http.StatusInternalServerError, healthResp, 
common.JSON)
+               if err != nil {
+                       openlogging.Error(fmt.Sprintf("Write HeaderAndJSON 
error %s: ", err.Error()))
+               }
                return
        }
-       context.WriteHeaderAndJSON(http.StatusOK, healthResp, common.JSON)
+       err := context.WriteHeaderAndJSON(http.StatusOK, healthResp, 
common.JSON)
+       if err != nil {
+               openlogging.Error(fmt.Sprintf("Write HeaderAndJSON error %s: ", 
err.Error()))
+       }
 }
 
 //GetMetrics returns metrics data
@@ -50,7 +58,10 @@ func (a *StatusResource) GetMetrics(context 
*restful.Context) {
 //GetVersion writes version in response header
 func (a *StatusResource) GetVersion(context *restful.Context) {
        versions := version.Ver()
-       context.WriteHeaderAndJSON(http.StatusOK, versions, common.JSON)
+       err := context.WriteHeaderAndJSON(http.StatusOK, versions, common.JSON)
+       if err != nil {
+               openlogging.Error(fmt.Sprintf("Write HeaderAndJSON error %s: ", 
err.Error()))
+       }
 }
 
 //URLPatterns helps to respond for  Admin API calls
diff --git a/proxy/server/server.go b/proxy/server/server.go
index 717f7f7..e8a895c 100644
--- a/proxy/server/server.go
+++ b/proxy/server/server.go
@@ -34,37 +34,36 @@ import (
 func Run() {
        // server init
        if err := cmd.Init(); err != nil {
-               panic(err)
+               openlogging.Fatal(err.Error())
        }
        if err := cmd.Configs.GeneratePortsMap(); err != nil {
-               panic(err)
+               openlogging.Fatal(err.Error())
        }
        bootstrap.RegisterFramework()
        bootstrap.SetHandlers()
        if err := chassis.Init(); err != nil {
-               openlogging.Error("Go chassis init failed, Mesher is not 
available: " + err.Error())
-               panic(err)
+               openlogging.Fatal("Go chassis init failed, Mesher is not 
available: " + err.Error())
        }
        if err := bootstrap.InitEgressChain(); err != nil {
                openlogging.Error("egress chain int failed: %s", 
openlogging.WithTags(openlogging.Tags{
                        "err": err.Error(),
                }))
-               panic(err)
+               openlogging.Fatal(err.Error())
        }
 
        if err := bootstrap.Start(); err != nil {
-               openlogging.Error("Bootstrap failed: " + err.Error())
-               panic(err)
+               openlogging.Fatal("Bootstrap failed: " + err.Error())
        }
        openlogging.Info("server start complete", 
openlogging.WithTags(openlogging.Tags{
                "version": version.Ver().Version,
        }))
        if err := health.Run(); err != nil {
-               openlogging.Error("Health manager start failed: " + err.Error())
-               panic(err)
+               openlogging.Fatal("Health manager start failed: " + err.Error())
        }
        profile()
-       chassis.Run()
+       if err := chassis.Run(); err != nil {
+               openlogging.Fatal("Chassis failed: " + err.Error())
+       }
 }
 
 func profile() {

Reply via email to