You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ch...@apache.org on 2019/12/23 06:00:13 UTC

[servicecomb-toolkit] 04/04: [SCB-1663] test cli.sh in travis ci and fix some bug

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

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

commit 84f0c9d69766ec65a9c177dd4fff8d3df95cdc13
Author: kakulisen <18...@163.com>
AuthorDate: Mon Dec 16 11:06:24 2019 +0800

    [SCB-1663] test cli.sh in travis ci and fix some bug
    
    Signed-off-by: kakulisen <18...@163.com>
---
 .travis.yml                                        |   2 +
 .../servicecomb/toolkit/cli/DocGenerate.java       |  22 ++--
 .../servicecomb/toolkit/cli/ToolkitMain.java       |   2 +-
 .../docgen/ContractsSwaggerUIGenerator.java        |   2 +-
 scripts/cliTest.sh                                 | 119 +++++++++++++++++++++
 5 files changed, 138 insertions(+), 9 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 513de34..3e27791 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -38,5 +38,7 @@ jobs:
   include:
   - stage: Test
     script: ./scripts/test.sh
+  - stage: Cli Test
+    script: ./scripts/cliTest.sh
   - stage: Deploy on
     script: if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then bash ./scripts/deploy.sh; fi
diff --git a/cli/src/main/java/org/apache/servicecomb/toolkit/cli/DocGenerate.java b/cli/src/main/java/org/apache/servicecomb/toolkit/cli/DocGenerate.java
index 7426846..cb39268 100755
--- a/cli/src/main/java/org/apache/servicecomb/toolkit/cli/DocGenerate.java
+++ b/cli/src/main/java/org/apache/servicecomb/toolkit/cli/DocGenerate.java
@@ -19,7 +19,6 @@ package org.apache.servicecomb.toolkit.cli;
 
 import java.io.File;
 import java.io.IOException;
-import java.net.URI;
 import java.nio.file.FileVisitResult;
 import java.nio.file.Files;
 import java.nio.file.Path;
@@ -29,14 +28,16 @@ import java.nio.file.attribute.BasicFileAttributes;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.servicecomb.swagger.SwaggerUtils;
-import org.apache.servicecomb.toolkit.GeneratorFactory;
 import org.apache.servicecomb.toolkit.DocGenerator;
+import org.apache.servicecomb.toolkit.GeneratorFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import io.airlift.airline.Command;
 import io.airlift.airline.Option;
+import io.swagger.parser.OpenAPIParser;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.parser.core.models.SwaggerParseResult;
 
 @Command(name = "docgenerate", description = "Generate document by OpenAPI specification file")
 public class DocGenerate implements Runnable {
@@ -50,7 +51,7 @@ public class DocGenerate implements Runnable {
 
   @Option(name = {"-f", "--format"}, title = "document format", required = false,
       description = "format of document, as swagger-ui or asciidoc-html (swagger-ui by default)")
-  private String format = "html";
+  private String format = "swagger-ui";
 
   @Option(name = {"-o", "--output"}, title = "output directory",
       description = "location of the generated document (current dir by default)")
@@ -73,7 +74,7 @@ public class DocGenerate implements Runnable {
           @Override
           public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
 
-            docGeneratorConfig.put("contractContent", SwaggerUtils.parseSwagger(file.toUri().toURL()));
+            docGeneratorConfig.put("contractContent", parseOpenApi(specPath));
             docGeneratorConfig.put("outputPath",
                 output + File.separator + file.toFile().getName().substring(0, file.toFile().getName().indexOf(".")));
             docGenerator.configure(docGeneratorConfig);
@@ -85,7 +86,7 @@ public class DocGenerate implements Runnable {
       } else if (Files.isRegularFile(specPath)) {
         fileName[0] = specPath.toFile().getName();
 
-        docGeneratorConfig.put("contractContent", SwaggerUtils.parseSwagger(specPath.toUri().toURL()));
+        docGeneratorConfig.put("contractContent", parseOpenApi(specPath));
         docGeneratorConfig.put("outputPath", output + File.separator + new File(specFile).getName()
             .substring(0, new File(specFile).getName().indexOf(".")));
         docGenerator.configure(docGeneratorConfig);
@@ -93,7 +94,7 @@ public class DocGenerate implements Runnable {
       } else {
         fileName[0] = specFile;
 
-        docGeneratorConfig.put("contractContent", SwaggerUtils.parseSwagger(URI.create(specFile).toURL()));
+        docGeneratorConfig.put("contractContent", parseOpenApi(specPath));
         docGeneratorConfig.put("outputPath", output + File.separator + new File(specFile).getName()
             .substring(0, new File(specFile).getName().indexOf(".")));
         docGenerator.configure(docGeneratorConfig);
@@ -105,4 +106,11 @@ public class DocGenerate implements Runnable {
       LOGGER.error(e.getMessage());
     }
   }
+
+  public OpenAPI parseOpenApi(Path file) {
+    SwaggerParseResult swaggerParseResult = new OpenAPIParser()
+        .readLocation(file.toString(), null, null);
+    OpenAPI openAPI = swaggerParseResult.getOpenAPI();
+    return openAPI;
+  }
 }
diff --git a/cli/src/main/java/org/apache/servicecomb/toolkit/cli/ToolkitMain.java b/cli/src/main/java/org/apache/servicecomb/toolkit/cli/ToolkitMain.java
index 851289d..ff07822 100755
--- a/cli/src/main/java/org/apache/servicecomb/toolkit/cli/ToolkitMain.java
+++ b/cli/src/main/java/org/apache/servicecomb/toolkit/cli/ToolkitMain.java
@@ -40,7 +40,7 @@ public class ToolkitMain {
     if (StringUtils.isNotEmpty(scriptName)) {
       builder = Cli.builder(scriptName);
     } else {
-      builder = Cli.builder("java -jar toolkit-cli-" + projectVersion + ".jar");
+      builder = Cli.builder("java -jar cli-" + projectVersion + ".jar");
     }
 
     builder.withDescription("Microservice development toolkit(version " + projectVersion
diff --git a/docgen/src/main/java/org/apache/servicecomb/toolkit/docgen/ContractsSwaggerUIGenerator.java b/docgen/src/main/java/org/apache/servicecomb/toolkit/docgen/ContractsSwaggerUIGenerator.java
index 1bf2e7a..5b88386 100755
--- a/docgen/src/main/java/org/apache/servicecomb/toolkit/docgen/ContractsSwaggerUIGenerator.java
+++ b/docgen/src/main/java/org/apache/servicecomb/toolkit/docgen/ContractsSwaggerUIGenerator.java
@@ -50,7 +50,7 @@ public class ContractsSwaggerUIGenerator implements DocGenerator {
   @Override
 
   public boolean canProcess(String type) {
-    return "default".equals(type);
+    return "default".equals(type) || "swagger-ui".equals(type);
   }
 
   @Override
diff --git a/scripts/cliTest.sh b/scripts/cliTest.sh
new file mode 100755
index 0000000..c20cef6
--- /dev/null
+++ b/scripts/cliTest.sh
@@ -0,0 +1,119 @@
+#!/usr/bin/env bash
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+#bin/sh
+
+projectDir=$(pwd)
+
+# get an binary package
+mvn clean install -DskipTests -Prelease -Dgpg.skip=true
+cd toolkit-distribution/target/
+unzip apache-servicecomb-toolkit-distribution-*-bin.zip
+cd apache-servicecomb-toolkit-distribution-*-bin
+
+function checkFail
+{
+  if [ $? -ne 0 ]; then
+    echo "run $1 failed"
+    exit 1
+  fi
+}
+
+function helpTest
+{
+  # help
+  ./cli.sh help
+
+  checkFail helpTest
+  echo "./cli.sh help test success"
+}
+
+function codegenerateTest
+{
+  # codegenerate
+
+  for programingModel in "SpringMVC" "POJO" "JAX-RS" "SpringBoot"
+  do
+    ./cli.sh codegenerate \
+     -m ServiceComb \
+     -i ${projectDir}/cli/src/test/resources/swagger.yaml \
+     -o ${projectDir}/target \
+     -p ${programingModel} 2>&1 \
+     | grep "Success to generate code"
+
+    checkFail codegenerateTest
+    echo "generate ${programingModel} is ok"
+  done
+
+  echo "./cli.sh codegenerate test success"
+}
+
+function docgenerateTest
+{
+  # docgenerate
+  ./cli.sh docgenerate \
+   -i ${projectDir}/cli/src/test/resources/swagger.yaml \
+   -o ${projectDir}/target 2>&1
+
+  checkFail docgenerateTest
+  echo "./cli.sh docgenerate test success"
+}
+
+function checkstyleTest
+{
+  # checkstyle
+  ./cli.sh checkstyle \
+   -r ${projectDir}/cli/src/test/resources/oas/style-rules.properties \
+   -f ${projectDir}/cli/src/test/resources/oas/style.yaml 2>&1 \
+   | grep "check not passed"
+
+  checkFail checkstyleTest
+
+  ./cli.sh cs \
+   -r ${projectDir}/cli/src/test/resources/oas/style-rules.properties \
+   -f ${projectDir}/cli/src/test/resources/oas/style.yaml 2>&1 \
+   | grep "check not passed"
+
+  checkFail checkstyleTest
+
+  echo "./cli.sh checkstyle test success"
+}
+
+function checkcompatibilityTest
+{
+  # checkcompatibility
+  ./cli.sh checkcompatibility \
+   ${projectDir}/cli/src/test/resources/oas/compatibility-left.yaml \
+   ${projectDir}/cli/src/test/resources/oas/compatibility-right.yaml 2>&1 \
+   | grep "adding is not allowed on right side"
+
+  checkFail checkcompatibilityTest
+
+  ./cli.sh cc \
+   ${projectDir}/cli/src/test/resources/oas/compatibility-left.yaml \
+   ${projectDir}/cli/src/test/resources/oas/compatibility-right.yaml 2>&1 \
+   | grep "adding is not allowed on right side"
+
+  checkFail checkcompatibilityTest
+  echo "./cli.sh checkcompatibility test success"
+}
+
+helpTest
+codegenerateTest
+docgenerateTest
+checkstyleTest
+checkcompatibilityTest