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 2019/07/02 02:26:59 UTC

[servicecomb-java-chassis] branch weak-contract-type updated: [SCB-1342][WIP][WEAK] consumer should not use ArgumentsMapperDirectReuse when arg index is different

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

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


The following commit(s) were added to refs/heads/weak-contract-type by this push:
     new 62498aa  [SCB-1342][WIP][WEAK] consumer should not use ArgumentsMapperDirectReuse when arg index is different
62498aa is described below

commit 62498aa1e9bd8ee6852b877ce155d040a0bac302
Author: wujimin <wu...@huawei.com>
AuthorDate: Tue Jul 2 00:32:08 2019 +0800

    [SCB-1342][WIP][WEAK] consumer should not use ArgumentsMapperDirectReuse when arg index is different
---
 .../arguments/consumer/ConsumerArgumentSame.java   |  4 +
 .../consumer/ConsumerArgumentsMapperCreator.java   |  3 +-
 .../arguments/consumer/TestJaxrsV1V1.java          | 34 +++++++--
 .../arguments/consumer/TestPojoOneArg.java         | 87 ++++++++++++++++++++++
 4 files changed, 121 insertions(+), 7 deletions(-)

diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerArgumentSame.java b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerArgumentSame.java
index 367c9cc..e6dea39 100644
--- a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerArgumentSame.java
+++ b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerArgumentSame.java
@@ -30,6 +30,10 @@ public final class ConsumerArgumentSame implements ArgumentMapper {
     this.swaggerIdx = swaggerIdx;
   }
 
+  public boolean isSameIndex() {
+    return swaggerIdx == consumerIdx;
+  }
+
   @Override
   public void mapArgument(SwaggerInvocation invocation, Object[] consumerArguments) {
     invocation.setSwaggerArgument(swaggerIdx, consumerArguments[consumerIdx]);
diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerArgumentsMapperCreator.java b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerArgumentsMapperCreator.java
index 15933d5..e5b0cf1 100644
--- a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerArgumentsMapperCreator.java
+++ b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerArgumentsMapperCreator.java
@@ -49,7 +49,8 @@ public class ConsumerArgumentsMapperCreator extends AbstractArgumentsMapperCreat
 
   private boolean isAllSameMapper() {
     for (ArgumentMapper mapper : mappers) {
-      if (mapper instanceof ConsumerArgumentSame) {
+      if (mapper instanceof ConsumerArgumentSame &&
+          ((ConsumerArgumentSame) mapper).isSameIndex()) {
         continue;
       }
 
diff --git a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/TestJaxrsV1V1.java b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/TestJaxrsV1V1.java
index 4f5db20..836a42a 100644
--- a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/TestJaxrsV1V1.java
+++ b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/TestJaxrsV1V1.java
@@ -35,7 +35,7 @@ import io.swagger.models.Swagger;
 
 public class TestJaxrsV1V1 {
   @Test
-  public void add_add() {
+  public void should_mapper_consumer_multi_args_to_swagger_multi_args() {
     SwaggerEnvironment environment = new SwaggerEnvironment();
     Swagger swagger = SwaggerGenerator.generate(JaxrsAddV1.class);
 
@@ -52,8 +52,30 @@ public class TestJaxrsV1V1 {
     Assert.assertEquals(2, (int) invocation.getSwaggerArgument(1));
   }
 
+  interface ConsumerAddV1_diff_order {
+    int add(int y, int x);
+  }
+
+  @Test
+  public void should_mapper_consumer_multi_args_to_swagger_multi_args_with_diff_order() {
+    SwaggerEnvironment environment = new SwaggerEnvironment();
+    Swagger swagger = SwaggerGenerator.generate(JaxrsAddV1.class);
+
+    SwaggerConsumer swaggerConsumer = environment.createConsumer(ConsumerAddV1_diff_order.class, swagger);
+    ConsumerArgumentsMapper mapper = swaggerConsumer.findOperation("add").getArgumentsMapper();
+
+    Object[] arguments = new Object[] {2, 1};
+    SwaggerInvocation invocation = new SwaggerInvocation();
+
+    mapper.toInvocation(arguments, invocation);
+
+    Assert.assertEquals(2, invocation.getSwaggerArguments().length);
+    Assert.assertEquals(1, (int) invocation.getSwaggerArgument(0));
+    Assert.assertEquals(2, (int) invocation.getSwaggerArgument(1));
+  }
+
   @Test
-  public void add_addBeanParam() {
+  public void should_mapper_consumer_multi_args_to_swagger_multi_args_gen_by_BeanParam() {
     SwaggerEnvironment environment = new SwaggerEnvironment();
     Swagger swagger = SwaggerGenerator.generate(JaxrsAddBeanParamV1.class);
 
@@ -71,7 +93,7 @@ public class TestJaxrsV1V1 {
   }
 
   @Test
-  public void add_addBody() {
+  public void should_mapper_consumer_multi_args_to_swagger_body() {
     SwaggerEnvironment environment = new SwaggerEnvironment();
     Swagger swagger = SwaggerGenerator.generate(JaxrsAddBodyV1.class);
 
@@ -90,7 +112,7 @@ public class TestJaxrsV1V1 {
   }
 
   @Test
-  public void addBody_add() {
+  public void should_mapper_consumer_wrapped_body_to_swagger_multi_args() {
     SwaggerEnvironment environment = new SwaggerEnvironment();
     Swagger swagger = SwaggerGenerator.generate(JaxrsAddV1.class);
 
@@ -108,7 +130,7 @@ public class TestJaxrsV1V1 {
   }
 
   @Test
-  public void addBody_addBeanParam() {
+  public void should_mapper_consumer_wrapped_body_to_swagger_multi_args_gen_by_BeanParam() {
     SwaggerEnvironment environment = new SwaggerEnvironment();
     Swagger swagger = SwaggerGenerator.generate(JaxrsAddBeanParamV1.class);
 
@@ -126,7 +148,7 @@ public class TestJaxrsV1V1 {
   }
 
   @Test
-  public void addBody_addBody() {
+  public void should_mapper_consumer_body_to_swagger_body() {
     SwaggerEnvironment environment = new SwaggerEnvironment();
     Swagger swagger = SwaggerGenerator.generate(JaxrsAddBodyV1.class);
     SwaggerConsumer swaggerConsumer = environment.createConsumer(ConsumerAddBodyV1.class, swagger);
diff --git a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/TestPojoOneArg.java b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/TestPojoOneArg.java
new file mode 100644
index 0000000..345017e
--- /dev/null
+++ b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/TestPojoOneArg.java
@@ -0,0 +1,87 @@
+/*
+ * 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.swagger.invocation.arguments.consumer;
+
+import java.util.LinkedHashMap;
+
+import org.apache.servicecomb.foundation.test.scaffolding.model.Color;
+import org.apache.servicecomb.foundation.test.scaffolding.model.User;
+import org.apache.servicecomb.swagger.engine.SwaggerConsumer;
+import org.apache.servicecomb.swagger.engine.SwaggerEnvironment;
+import org.apache.servicecomb.swagger.generator.SwaggerGenerator;
+import org.apache.servicecomb.swagger.invocation.SwaggerInvocation;
+import org.apache.servicecomb.swagger.invocation.schemas.ConsumerOneArg;
+import org.apache.servicecomb.swagger.invocation.schemas.PojoOneArg;
+import org.junit.Assert;
+import org.junit.Test;
+
+import io.swagger.models.Swagger;
+
+public class TestPojoOneArg {
+  @Test
+  public void should_mapper_consumer_simple_to_swagger_body() {
+    SwaggerEnvironment environment = new SwaggerEnvironment();
+    Swagger swagger = SwaggerGenerator.generate(PojoOneArg.class);
+
+    SwaggerConsumer swaggerConsumer = environment.createConsumer(ConsumerOneArg.class, swagger);
+    ConsumerArgumentsMapper mapper = swaggerConsumer.findOperation("simple").getArgumentsMapper();
+
+    Object[] arguments = new Object[] {"name"};
+    SwaggerInvocation invocation = new SwaggerInvocation();
+
+    mapper.toInvocation(arguments, invocation);
+
+    LinkedHashMap<String, Object> map = invocation.getSwaggerArgument(0);
+    Assert.assertEquals(1, map.size());
+    Assert.assertEquals("name", map.get("name"));
+  }
+
+  @Test
+  public void should_mapper_consumer_bean_to_swagger_body() {
+    SwaggerEnvironment environment = new SwaggerEnvironment();
+    Swagger swagger = SwaggerGenerator.generate(PojoOneArg.class);
+
+    SwaggerConsumer swaggerConsumer = environment.createConsumer(ConsumerOneArg.class, swagger);
+    ConsumerArgumentsMapper mapper = swaggerConsumer.findOperation("bean").getArgumentsMapper();
+
+    Object[] arguments = new Object[] {new User()};
+    SwaggerInvocation invocation = new SwaggerInvocation();
+
+    mapper.toInvocation(arguments, invocation);
+
+    Assert.assertEquals(1, invocation.getSwaggerArguments().length);
+    Assert.assertSame(arguments[0], invocation.getSwaggerArgument(0));
+  }
+
+  @Test
+  public void should_mapper_consumer_enum_to_swagger_body_field() {
+    SwaggerEnvironment environment = new SwaggerEnvironment();
+    Swagger swagger = SwaggerGenerator.generate(PojoOneArg.class);
+
+    SwaggerConsumer swaggerConsumer = environment.createConsumer(ConsumerOneArg.class, swagger);
+    ConsumerArgumentsMapper mapper = swaggerConsumer.findOperation("enumBody").getArgumentsMapper();
+
+    Object[] arguments = new Object[] {Color.BLUE};
+    SwaggerInvocation invocation = new SwaggerInvocation();
+
+    mapper.toInvocation(arguments, invocation);
+
+    LinkedHashMap<String, Object> map = invocation.getSwaggerArgument(0);
+    Assert.assertEquals(1, map.size());
+    Assert.assertEquals(Color.BLUE, map.get("color"));
+  }
+}