You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2020/01/23 09:16:00 UTC

[servicecomb-java-chassis] 01/03: [SCB-1734]add a test case for bean with aXXX property and some refactoring

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

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

commit 2573778d610e7633184fe379af8d02edd9a537c1
Author: liubao <bi...@qq.com>
AuthorDate: Wed Jan 22 14:39:39 2020 +0800

    [SCB-1734]add a test case for bean with aXXX property and some refactoring
---
 .../org/apache/servicecomb/core/Invocation.java    |   3 +-
 .../servicecomb/demo/model/SpecialNameModel.java   |  22 ++-
 .../apache/servicecomb/demo/tccserver/TestTcc.java |  27 ---
 .../demo/springmvc/client/TestWeakSpringmvc.java   |  25 ++-
 .../demo/springmvc/server/WeakSpringmvc.java       |   7 +
 .../foundation/protobuf/ProtoMapperFactory.java    |   1 -
 .../transport/highway/HighwayCodec.java            |   2 +-
 .../transport/highway/HighwayOutputStream.java     |  24 ++-
 .../transport/highway/message/LoginRequest.java    |   5 +-
 .../transport/highway/message/LoginResponse.java   |   4 +-
 .../transport/highway/message/RequestHeader.java   |   9 +-
 .../transport/highway/message/ResponseHeader.java  |   5 +-
 .../highway/TestHighwayServerConnection.java       | 193 ---------------------
 13 files changed, 62 insertions(+), 265 deletions(-)

diff --git a/core/src/main/java/org/apache/servicecomb/core/Invocation.java b/core/src/main/java/org/apache/servicecomb/core/Invocation.java
index 6b81b9a..552d3b9 100644
--- a/core/src/main/java/org/apache/servicecomb/core/Invocation.java
+++ b/core/src/main/java/org/apache/servicecomb/core/Invocation.java
@@ -250,8 +250,7 @@ public class Invocation extends SwaggerInvocation {
       this.invocationArguments = swaggerArguments;
     }
   }
-
-  // TODO: WEAK add release notes to tell this change in 2.0.0
+  
   public Object[] toProducerArguments() {
     Method method = operationMeta.getSwaggerProducerOperation().getProducerMethod();
     Object[] args = new Object[method.getParameterCount()];
diff --git a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayServerInvoke.java b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/model/SpecialNameModel.java
similarity index 60%
rename from transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayServerInvoke.java
rename to demo/demo-schema/src/main/java/org/apache/servicecomb/demo/model/SpecialNameModel.java
index e2f2547..dfacc03 100644
--- a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayServerInvoke.java
+++ b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/model/SpecialNameModel.java
@@ -15,18 +15,22 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.transport.highway;
+package org.apache.servicecomb.demo.model;
 
-import org.junit.Test;
+import com.fasterxml.jackson.annotation.JsonProperty;
 
-public class TestHighwayServerInvoke {
-  @Test
-  public void test() {
-    // TODO: add an integration tests to test metrics for highway works
+public class SpecialNameModel {
+  // names starts with only one lower case , although getter/setter generated by IDE is correct,
+  // will cause jackson generate incorrect swagger names.
+  // @JsonProperty must be used to make json work in a predictable way.
+  @JsonProperty("aIntName")
+  private int aIntName;
+
+  public int getaIntName() {
+    return aIntName;
   }
 
-  @Test
-  public void testFlowControlQps() {
-    // TODO : add an integration tests to test flow control for higwway works
+  public void setaIntName(int aIntName) {
+    this.aIntName = aIntName;
   }
 }
diff --git a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/tccserver/TestTcc.java b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/tccserver/TestTcc.java
deleted file mode 100644
index be5f1df..0000000
--- a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/tccserver/TestTcc.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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 org.apache.servicecomb.demo.tccserver;
-
-import org.apache.servicecomb.demo.server.TestRequest;
-import org.apache.servicecomb.demo.server.User;
-
-public interface TestTcc {
-  User wrapParam(TestRequest request);
-
-  User splitParam(int index, User user);
-}
diff --git a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestWeakSpringmvc.java b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestWeakSpringmvc.java
index 36d4c91..a2f9817 100644
--- a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestWeakSpringmvc.java
+++ b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestWeakSpringmvc.java
@@ -25,6 +25,7 @@ import java.util.Map;
 import org.apache.servicecomb.core.provider.consumer.InvokerUtils;
 import org.apache.servicecomb.demo.CategorizedTestCase;
 import org.apache.servicecomb.demo.TestMgr;
+import org.apache.servicecomb.demo.model.SpecialNameModel;
 import org.apache.servicecomb.demo.server.GenericsModel;
 import org.apache.servicecomb.foundation.common.utils.JsonUtils;
 import org.apache.servicecomb.provider.pojo.RpcReference;
@@ -89,6 +90,10 @@ interface GenericsModelInf {
   GenericsModel genericParamsModel(int code, GenericsModel model);
 }
 
+interface SpecialNameModelInf {
+  SpecialNameModel specialNameModel(int code, SpecialNameModel model);
+}
+
 @Component
 public class TestWeakSpringmvc implements CategorizedTestCase {
   @RpcReference(microserviceName = "springmvc", schemaId = "weakSpringmvc")
@@ -103,6 +108,9 @@ public class TestWeakSpringmvc implements CategorizedTestCase {
   @RpcReference(microserviceName = "springmvc", schemaId = "weakSpringmvc")
   private GenericsModelInf genericsModelInf;
 
+  @RpcReference(microserviceName = "springmvc", schemaId = "weakSpringmvc")
+  private SpecialNameModelInf specialNameModelInf;
+
   private RestTemplate restTemplate = RestTemplateBuilder.create();
 
   @Override
@@ -117,14 +125,23 @@ public class TestWeakSpringmvc implements CategorizedTestCase {
 
   @Override
   public void testAllTransport() throws Exception {
-    getDiffName();
+    testDiffName();
 
     testGenerics();
 
-    getGenericsModel();
+    testGenericsModel();
+
+    testSpecailNameModel();
+  }
+
+  private void testSpecailNameModel() {
+    SpecialNameModel model = new SpecialNameModel();
+    model.setaIntName(30);
+    SpecialNameModel result = specialNameModelInf.specialNameModel(0, model);
+    TestMgr.check(30, result.getaIntName());
   }
 
-  private void getGenericsModel() throws JsonProcessingException {
+  private void testGenericsModel() throws JsonProcessingException {
     GenericsModel model = new GenericsModel();
     model.setName("model");
     List<List<String>> namesList = new ArrayList<>();
@@ -154,7 +171,7 @@ public class TestWeakSpringmvc implements CategorizedTestCase {
     TestMgr.check("hello", nameListResult.get(0).get(0));
   }
 
-  private void getDiffName() {
+  private void testDiffName() {
     TestMgr.check(7, diffNames.differentName(2, 3));
     TestMgr.check(8, diffNames2.differentName(2, 3));
     TestMgr.check(7, restTemplate.getForObject("cse://springmvc/weakSpringmvc/diffNames?x=2&y=3", Integer.class));
diff --git a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/WeakSpringmvc.java b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/WeakSpringmvc.java
index 2777572..bb75d6a 100644
--- a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/WeakSpringmvc.java
+++ b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/WeakSpringmvc.java
@@ -19,6 +19,7 @@ package org.apache.servicecomb.demo.springmvc.server;
 
 import java.util.List;
 
+import org.apache.servicecomb.demo.model.SpecialNameModel;
 import org.apache.servicecomb.demo.server.GenericsModel;
 import org.apache.servicecomb.provider.rest.common.RestSchema;
 import org.springframework.http.MediaType;
@@ -49,4 +50,10 @@ public class WeakSpringmvc {
   public GenericsModel genericParamsModel(@RequestParam("code") int code, @RequestBody GenericsModel model) {
     return model;
   }
+
+  @GetMapping(path = "/specialNameModel")
+  @ApiOperation(value = "specialNameModel", nickname = "specialNameModel")
+  public SpecialNameModel specialNameModel(@RequestParam("code") int code, @RequestBody SpecialNameModel model) {
+    return model;
+  }
 }
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/ProtoMapperFactory.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/ProtoMapperFactory.java
index f1b6774..15cf994 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/ProtoMapperFactory.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/ProtoMapperFactory.java
@@ -37,7 +37,6 @@ public class ProtoMapperFactory {
   public ProtoMapperFactory() {
     jsonMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
     jsonMapper.setSerializationInclusion(Include.NON_NULL);
-//    jsonMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.OBJECT_AND_NON_CONCRETE, JsonTypeInfo.As.PROPERTY);
 
     beanDescriptorManager = new BeanDescriptorManager(jsonMapper.getSerializationConfig());
   }
diff --git a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayCodec.java b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayCodec.java
index bb28651..61423f2 100644
--- a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayCodec.java
+++ b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayCodec.java
@@ -68,7 +68,7 @@ public final class HighwayCodec {
       List<Parameter> swaggerParameters = operationMeta.getSwaggerOperation()
           .getParameters();
       for (Parameter parameter : swaggerParameters) {
-        if (!parameter.getRequired() && swaggerArguments.get(parameter.getName()) == null) {
+        if (swaggerArguments.get(parameter.getName()) == null) {
           Type type = swaggerProducerOperation.getSwaggerParameterType(parameter.getName());
           if (type instanceof Class) {
             if (((Class) type).isPrimitive()) {
diff --git a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayOutputStream.java b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayOutputStream.java
index 3eac978..b0eb3e8 100644
--- a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayOutputStream.java
+++ b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayOutputStream.java
@@ -32,32 +32,30 @@ public class HighwayOutputStream extends TcpOutputStream {
     write(RequestHeader.getRootSerializer().serialize(header), requestRootSerializer.serialize(body));
   }
 
-  public void write(ResponseHeader header, ResponseRootSerializer responseRootSerializer, Object body) throws Exception {
+  public void write(ResponseHeader header, ResponseRootSerializer responseRootSerializer, Object body)
+      throws Exception {
     write(ResponseHeader.getRootSerializer().serialize(header), responseRootSerializer.serialize(body));
   }
 
-  public void write(RequestHeader header, RootSerializer bodySchema, Object body) throws Exception {
-    write(RequestHeader.getRootSerializer(), header, bodySchema, body);
+  public void write(RequestHeader header, RootSerializer bodySerializer, Object body) throws Exception {
+    write(RequestHeader.getRootSerializer(), header, bodySerializer, body);
   }
 
-  public void write(ResponseHeader header, RootSerializer bodySchema, Object body) throws Exception {
-    write(ResponseHeader.getRootSerializer(), header, bodySchema, body);
+  public void write(ResponseHeader header, RootSerializer bodySerializer, Object body) throws Exception {
+    write(ResponseHeader.getRootSerializer(), header, bodySerializer, body);
   }
 
-  public void write(RootSerializer headerSchema, Object header, RootSerializer bodySchema, Object body)
+  public void write(RootSerializer headerSerializer, Object header, RootSerializer bodySerializer, Object body)
       throws Exception {
     byte[] headerBytes = new byte[0];
     byte[] bodyBytes = new byte[0];
 
-    // 写header
-    if (headerSchema != null) {
-      headerBytes = headerSchema.serialize(header);
+    if (headerSerializer != null) {
+      headerBytes = headerSerializer.serialize(header);
     }
 
-    // 写body
-    // void时bodySchema为null
-    if (bodySchema != null) {
-      bodyBytes = bodySchema.serialize(body);
+    if (bodySerializer != null) {
+      bodyBytes = bodySerializer.serialize(body);
     }
 
     write(headerBytes, bodyBytes);
diff --git a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/message/LoginRequest.java b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/message/LoginRequest.java
index 191153e..c462b52 100644
--- a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/message/LoginRequest.java
+++ b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/message/LoginRequest.java
@@ -23,10 +23,10 @@ import org.apache.servicecomb.foundation.protobuf.RootSerializer;
 import io.vertx.core.buffer.Buffer;
 
 public class LoginRequest {
-  // TODO : WEAK refactor reuse
   private static ProtoMapperFactory protoMapperFactory = new ProtoMapperFactory();
 
-  private static RootDeserializer<LoginRequest> rootDeserializer = protoMapperFactory.createFromName("LoginRequest.proto")
+  private static RootDeserializer<LoginRequest> rootDeserializer = protoMapperFactory
+      .createFromName("LoginRequest.proto")
       .createRootDeserializer("LoginRequest", LoginRequest.class);
 
   private static RootSerializer rootSerializer = protoMapperFactory.createFromName("LoginRequest.proto")
@@ -60,5 +60,4 @@ public class LoginRequest {
   public void setZipName(String zipName) {
     this.zipName = zipName;
   }
-
 }
diff --git a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/message/LoginResponse.java b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/message/LoginResponse.java
index a27fc7d..b084f8a 100644
--- a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/message/LoginResponse.java
+++ b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/message/LoginResponse.java
@@ -23,10 +23,10 @@ import org.apache.servicecomb.foundation.protobuf.RootSerializer;
 import io.vertx.core.buffer.Buffer;
 
 public class LoginResponse {
-  // TODO : WEAK refactor reuse
   private static ProtoMapperFactory protoMapperFactory = new ProtoMapperFactory();
 
-  private static RootDeserializer<LoginResponse> rootDeserializer = protoMapperFactory.createFromName("LoginResponse.proto")
+  private static RootDeserializer<LoginResponse> rootDeserializer = protoMapperFactory
+      .createFromName("LoginResponse.proto")
       .createRootDeserializer("LoginResponse", LoginResponse.class);
 
   private static RootSerializer rootSerializer = protoMapperFactory.createFromName("LoginResponse.proto")
diff --git a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/message/RequestHeader.java b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/message/RequestHeader.java
index 1835e25..e334ccb 100644
--- a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/message/RequestHeader.java
+++ b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/message/RequestHeader.java
@@ -25,15 +25,11 @@ import org.apache.servicecomb.foundation.protobuf.RootSerializer;
 
 import io.vertx.core.buffer.Buffer;
 
-/**
- * tag的缺失、乱序,是因为要兼容历史版本
- * 1.tag(4),是历史版本中的压缩算法名,转移到login消息中传递
- */
 public class RequestHeader {
-  // TODO : WEAK refactor reuse
   private static ProtoMapperFactory protoMapperFactory = new ProtoMapperFactory();
 
-  private static RootDeserializer<RequestHeader> rootDeserializer = protoMapperFactory.createFromName("RequestHeader.proto")
+  private static RootDeserializer<RequestHeader> rootDeserializer = protoMapperFactory
+      .createFromName("RequestHeader.proto")
       .createRootDeserializer("RequestHeader", RequestHeader.class);
 
   private static RootSerializer rootSerializer = protoMapperFactory.createFromName("RequestHeader.proto")
@@ -61,7 +57,6 @@ public class RequestHeader {
 
   private Map<String, String> context;
 
-  //CHECKSTYLE:ON
   public int getMsgType() {
     return msgType;
   }
diff --git a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/message/ResponseHeader.java b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/message/ResponseHeader.java
index 262ac71..65488c2 100644
--- a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/message/ResponseHeader.java
+++ b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/message/ResponseHeader.java
@@ -27,10 +27,10 @@ import org.apache.servicecomb.swagger.invocation.response.Headers;
 import io.vertx.core.buffer.Buffer;
 
 public class ResponseHeader {
-  // TODO : refactor reuse
   private static ProtoMapperFactory protoMapperFactory = new ProtoMapperFactory();
 
-  private static RootDeserializer<ResponseHeader> rootDeserializer = protoMapperFactory.createFromName("ResponseHeader.proto")
+  private static RootDeserializer<ResponseHeader> rootDeserializer = protoMapperFactory
+      .createFromName("ResponseHeader.proto")
       .createRootDeserializer("ResponseHeader", ResponseHeader.class);
 
   private static RootSerializer rootSerializer = protoMapperFactory.createFromName("ResponseHeader.proto")
@@ -64,7 +64,6 @@ public class ResponseHeader {
     this.flags = flags;
   }
 
-  //CHECKSTYLE:ON: magicnumber
   public int getStatusCode() {
     return statusCode;
   }
diff --git a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayServerConnection.java b/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayServerConnection.java
deleted file mode 100644
index d8ed159..0000000
--- a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayServerConnection.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * 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 org.apache.servicecomb.transport.highway;
-
-public class TestHighwayServerConnection {
-  // TODO : WK unit test
-//  private static WrapSchema requestHeaderSchema =
-//      ScopedProtobufSchemaManager.INSTANCE.getOrCreateSchema(RequestHeader.class);
-//
-//  private static WrapSchema setParameterRequestSchema =
-//      ScopedProtobufSchemaManager.INSTANCE.getOrCreateSchema(LoginRequest.class);
-//
-//  HighwayServerConnection connection;
-//
-//  @Mocked
-//  Endpoint endpoint;
-//
-//  @Mocked
-//  NetSocketImpl netSocket;
-//
-//  RequestHeader header = new RequestHeader();
-//
-//  @Before
-//  public void init() {
-//    new Expectations() {
-//      {
-//        netSocket.remoteAddress();
-//        result = new SocketAddressImpl(new InetSocketAddress("127.0.0.1", 80));
-//      }
-//    };
-//    connection = new HighwayServerConnection(endpoint);
-//    connection.init(netSocket);
-//
-//    header = new RequestHeader();
-//  }
-//
-//  @Test
-//  public void testInvalidMsgType() throws Exception {
-//    header.setMsgType((byte) 100);
-//    Buffer headerBuffer = createBuffer(requestHeaderSchema, header);
-//
-//    try {
-//      connection.handle(0, headerBuffer, null);
-//      throw new Error("must error");
-//    } catch (Throwable e) {
-//      Assert.assertEquals("Unknown tcp msgType 100", e.getMessage());
-//    }
-//  }
-//
-//  @Test
-//  public void testReqeustHeaderError() throws Exception {
-//    header.setMsgType(MsgType.LOGIN);
-//    Buffer headerBuffer = createBuffer(requestHeaderSchema, header);
-//
-//    headerBuffer.setByte(0, (byte) 100);
-//
-//    connection.handle(0, headerBuffer, null);
-//
-//    Assert.assertEquals(null, connection.getProtocol());
-//    Assert.assertEquals(null, connection.getZipName());
-//  }
-//
-//  @Test
-//  public void testSetParameterNormal() throws Exception {
-//    header.setMsgType(MsgType.LOGIN);
-//    Buffer headerBuffer = createBuffer(requestHeaderSchema, header);
-//
-//    LoginRequest body = new LoginRequest();
-//    body.setProtocol("p");
-//    body.setZipName("z");
-//    Buffer bodyBuffer = createBuffer(setParameterRequestSchema, body);
-//
-//    connection.handle(0, headerBuffer, bodyBuffer);
-//
-//    Assert.assertEquals("p", connection.getProtocol());
-//    Assert.assertEquals("z", connection.getZipName());
-//  }
-//
-//  @Test
-//  public void testSetParameterError() throws Exception {
-//    header.setMsgType(MsgType.LOGIN);
-//    Buffer headerBuffer = createBuffer(requestHeaderSchema, header);
-//
-//    LoginRequest body = new LoginRequest();
-//    body.setProtocol("p");
-//    body.setZipName("z");
-//    Buffer bodyBuffer = createBuffer(setParameterRequestSchema, body);
-//    bodyBuffer.setByte(0, (byte) 100);
-//
-//    connection.handle(0, headerBuffer, bodyBuffer);
-//
-//    Assert.assertEquals(null, connection.getProtocol());
-//    Assert.assertEquals(null, connection.getZipName());
-//  }
-//
-//  @Test
-//  public void testRequestNormal(@Mocked MicroserviceMeta microserviceMeta, @Mocked OperationMeta operationMeta,
-//      @Mocked SchemaMeta schemaMeta) throws Exception {
-//    header.setMsgType(MsgType.REQUEST);
-//    Buffer headerBuffer = createBuffer(requestHeaderSchema, header);
-//
-//    Buffer bodyBuffer = Buffer.buffer();
-//    new Expectations(SCBEngine.class) {
-//      {
-//        SCBEngine.getInstance().getProducerMicroserviceMeta();
-//        result = microserviceMeta;
-//      }
-//    };
-//    new Expectations() {
-//      {
-//        microserviceMeta.ensureFindSchemaMeta(header.getSchemaId());
-//        result = schemaMeta;
-//      }
-//    };
-//
-//    new Expectations(ProtobufManager.class) {
-//      {
-//        ProtobufManager.getOrCreateOperation(operationMeta);
-//        result = null;
-//      }
-//    };
-//
-//    Holder<Boolean> holder = new Holder<>();
-//    new MockUp<HighwayServerInvoke>() {
-//      @Mock
-//      public boolean init(NetSocket netSocket, long msgId,
-//          RequestHeader header, Buffer bodyBuffer) {
-//        return true;
-//      }
-//
-//      @Mock
-//      public void execute() {
-//        holder.value = true;
-//      }
-//    };
-//
-//    connection.handle(0, headerBuffer, bodyBuffer);
-//
-//    Assert.assertEquals(null, connection.getProtocol());
-//    Assert.assertEquals(null, connection.getZipName());
-//    Assert.assertEquals(true, holder.value);
-//  }
-//
-//  @Test
-//  public void testRequestError() throws Exception {
-//    header.setMsgType(MsgType.REQUEST);
-//    Buffer headerBuffer = createBuffer(requestHeaderSchema, header);
-//
-//    Buffer bodyBuffer = Buffer.buffer();
-//
-//    Holder<Boolean> holder = new Holder<>(false);
-//    new MockUp<HighwayServerInvoke>() {
-//      @Mock
-//      public boolean init(NetSocket netSocket, long msgId,
-//          RequestHeader header, Buffer bodyBuffer) {
-//        return false;
-//      }
-//    };
-//
-//    connection.handle(0, headerBuffer, bodyBuffer);
-//
-//    Assert.assertEquals(null, connection.getProtocol());
-//    Assert.assertEquals(null, connection.getZipName());
-//    Assert.assertEquals(false, holder.value);
-//  }
-//
-//  protected Buffer createBuffer(WrapSchema schema, Object value) throws Exception {
-//    Buffer headerBuffer;
-//    LinkedBuffer linkedBuffer = LinkedBuffer.allocate();
-//    ProtobufOutput output = new ProtobufOutput(linkedBuffer);
-//    schema.writeObject(output, value);
-//    try (BufferOutputStream os = new BufferOutputStream()) {
-//      LinkedBuffer.writeTo(os, linkedBuffer);
-//
-//      headerBuffer = os.getBuffer();
-//    }
-//    return headerBuffer;
-//  }
-}