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

dataroaring pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 3130a19fe9 [feature](regression) Enhancement regression frame, support 
http post… (#12565)
3130a19fe9 is described below

commit 3130a19fe94871df06be27e354ae49c0b62b33ba
Author: deardeng <[email protected]>
AuthorDate: Wed Sep 14 15:31:59 2022 +0800

    [feature](regression) Enhancement regression frame, support http post… 
(#12565)
---
 .../org/apache/doris/regression/Config.groovy      |  24 ++++-
 .../apache/doris/regression/ConfigOptions.groovy   |  10 ++
 .../doris/regression/action/HttpCliAction.groovy   | 115 +++++++++++++++++++++
 .../org/apache/doris/regression/suite/Suite.groovy |   7 ++
 .../framework/src/main/groovy/suite.gdsl           |   3 +-
 5 files changed, 157 insertions(+), 2 deletions(-)

diff --git 
a/regression-test/framework/src/main/groovy/org/apache/doris/regression/Config.groovy
 
b/regression-test/framework/src/main/groovy/org/apache/doris/regression/Config.groovy
index bf50eafdf4..46229e6b3f 100644
--- 
a/regression-test/framework/src/main/groovy/org/apache/doris/regression/Config.groovy
+++ 
b/regression-test/framework/src/main/groovy/org/apache/doris/regression/Config.groovy
@@ -22,11 +22,13 @@ import groovy.util.logging.Slf4j
 
 import com.google.common.collect.Maps
 import org.apache.commons.cli.CommandLine
+import org.apache.commons.cli.Option
 import org.apache.doris.regression.util.FileUtils
 import org.apache.doris.regression.util.JdbcUtils
 
 import java.sql.Connection
 import java.sql.DriverManager
+import java.util.concurrent.atomic.AtomicReference
 import java.util.function.Predicate
 
 import static org.apache.doris.regression.ConfigOptions.*
@@ -43,6 +45,8 @@ class Config {
     public String feHttpUser
     public String feHttpPassword
 
+    public String metaServiceHttpAddress
+
     public String suitePath
     public String dataPath
     public String realDataPath
@@ -72,6 +76,7 @@ class Config {
     public Set<String> excludeDirectorySet = new HashSet<>()
 
     public InetSocketAddress feHttpInetSocketAddress
+    public InetSocketAddress metaServiceHttpInetSocketAddress
     public Integer parallel
     public Integer suiteParallel
     public Integer actionParallel
@@ -81,7 +86,7 @@ class Config {
     Config() {}
 
     Config(String defaultDb, String jdbcUrl, String jdbcUser, String 
jdbcPassword,
-           String feHttpAddress, String feHttpUser, String feHttpPassword,
+           String feHttpAddress, String feHttpUser, String feHttpPassword, 
String metaServiceHttpAddress,
            String suitePath, String dataPath, String realDataPath, String 
sf1DataPath,
            String testGroups, String excludeGroups, String testSuites, String 
excludeSuites,
            String testDirectories, String excludeDirectories, String 
pluginPath) {
@@ -92,6 +97,7 @@ class Config {
         this.feHttpAddress = feHttpAddress
         this.feHttpUser = feHttpUser
         this.feHttpPassword = feHttpPassword
+        this.metaServiceHttpAddress = metaServiceHttpAddress
         this.suitePath = suitePath
         this.dataPath = dataPath
         this.realDataPath = realDataPath
@@ -165,6 +171,16 @@ class Config {
             throw new IllegalStateException("Can not parse stream load 
address: ${config.feHttpAddress}", t)
         }
 
+        config.metaServiceHttpAddress = 
cmd.getOptionValue(metaServiceHttpAddressOpt, config.metaServiceHttpAddress)
+        try {
+            Inet4Address host = 
Inet4Address.getByName(config.metaServiceHttpAddress.split(":")[0]) as 
Inet4Address
+            int port = 
Integer.valueOf(config.metaServiceHttpAddress.split(":")[1])
+            config.metaServiceHttpInetSocketAddress = new 
InetSocketAddress(host, port)
+        } catch (Throwable t) {
+            throw new IllegalStateException("Can not parse meta service 
address: ${config.metaServiceHttpAddress}", t)
+        }
+        log.info("msAddr : $config.metaServiceHttpAddress, socketAddr : 
$config.metaServiceHttpInetSocketAddress")
+
         config.defaultDb = cmd.getOptionValue(defaultDbOpt, config.defaultDb)
         config.jdbcUrl = cmd.getOptionValue(jdbcOpt, config.jdbcUrl)
         config.jdbcUser = cmd.getOptionValue(userOpt, config.jdbcUser)
@@ -205,6 +221,7 @@ class Config {
             configToString(obj.feHttpAddress),
             configToString(obj.feHttpUser),
             configToString(obj.feHttpPassword),
+            configToString(obj.metaServiceHttpAddress),
             configToString(obj.suitePath),
             configToString(obj.dataPath),
             configToString(obj.realDataPath),
@@ -257,6 +274,11 @@ class Config {
             log.info("Set feHttpAddress to '${config.feHttpAddress}' because 
not specify.".toString())
         }
 
+        if (config.metaServiceHttpAddress == null) {
+            config.metaServiceHttpAddress = "127.0.0.1:5000"
+            log.info("Set metaServiceHttpAddress to 
'${config.metaServiceHttpAddress}' because not specify.".toString())
+        }
+
         if (config.feHttpUser == null) {
             config.feHttpUser = "root"
             log.info("Set feHttpUser to '${config.feHttpUser}' because not 
specify.".toString())
diff --git 
a/regression-test/framework/src/main/groovy/org/apache/doris/regression/ConfigOptions.groovy
 
b/regression-test/framework/src/main/groovy/org/apache/doris/regression/ConfigOptions.groovy
index 7f39769c39..ed4d1a3104 100644
--- 
a/regression-test/framework/src/main/groovy/org/apache/doris/regression/ConfigOptions.groovy
+++ 
b/regression-test/framework/src/main/groovy/org/apache/doris/regression/ConfigOptions.groovy
@@ -35,6 +35,7 @@ class ConfigOptions {
     static Option feHttpAddressOpt
     static Option feHttpUserOpt
     static Option feHttpPasswordOpt
+    static Option metaServiceHttpAddressOpt
     static Option pathOpt
     static Option dataOpt
     static Option realDataOpt
@@ -224,6 +225,14 @@ class ConfigOptions {
                 .longOpt("feHttpPassword")
                 .desc("the password of fe http server")
                 .build()
+        metaServiceHttpAddressOpt = Option.builder("hm")
+                .argName("address")
+                .required(false)
+                .hasArg(true)
+                .type(String.class)
+                .longOpt("metaServiceHttpAddress")
+                .desc("the meta service http address, format is ip:port")
+                .build()
         genOutOpt = Option.builder("genOut")
                 .required(false)
                 .hasArg(false)
@@ -316,6 +325,7 @@ class ConfigOptions {
                 .addOption(feHttpAddressOpt)
                 .addOption(feHttpUserOpt)
                 .addOption(feHttpPasswordOpt)
+                .addOption(metaServiceHttpAddressOpt)
                 .addOption(genOutOpt)
                 .addOption(confFileOpt)
                 .addOption(forceGenOutOpt)
diff --git 
a/regression-test/framework/src/main/groovy/org/apache/doris/regression/action/HttpCliAction.groovy
 
b/regression-test/framework/src/main/groovy/org/apache/doris/regression/action/HttpCliAction.groovy
new file mode 100644
index 0000000000..7fe00c38a4
--- /dev/null
+++ 
b/regression-test/framework/src/main/groovy/org/apache/doris/regression/action/HttpCliAction.groovy
@@ -0,0 +1,115 @@
+// 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.doris.regression.action
+
+import groovy.transform.stc.ClosureParams
+import groovy.transform.stc.FromString
+import groovy.util.logging.Slf4j
+import org.apache.doris.regression.suite.SuiteContext
+import org.apache.http.client.methods.HttpGet
+import org.apache.http.entity.StringEntity
+import org.apache.http.entity.ContentType
+import org.apache.http.impl.client.HttpClients
+import org.apache.http.util.EntityUtils
+import org.apache.http.client.methods.HttpPost
+import org.apache.tools.ant.taskdefs.condition.Http;
+import org.junit.Assert
+
+@Slf4j
+class HttpCliAction implements SuiteAction {
+    private String endpoint
+    private String uri
+    private String body
+    private String result
+    private Closure check
+    SuiteContext context
+
+    HttpCliAction(SuiteContext context) {
+        this.context = context
+    }
+
+    void endpoint(Closure<String> endpointSupplier) {
+        this.endpoint = endpointSupplier.call()
+    }
+
+    void endpoint(String endpoint) {
+        this.endpoint = endpoint
+    }
+
+    void uri(Closure<String> uriSupplier) {
+        this.uri = uriSupplier.call()
+    }
+
+    void uri(String uri) {
+        this.uri = uri
+    }
+
+    void body(Closure<String> bodySupplier) {
+        this.body = bodySupplier.call()
+    }
+
+    void body(String body) {
+        this.body = body
+    }
+
+    @Override
+    void run() {
+        try {
+            def result = HttpClients.createDefault().withCloseable { client ->
+                uri = "http://$endpoint"; + uri
+                log.info("url : " + uri)
+                log.info("body: " + body)
+                HttpPost httpPost = new HttpPost(uri)
+                StringEntity requestEntity = new StringEntity(
+                        body,
+                        ContentType.APPLICATION_JSON);
+                httpPost.setEntity(requestEntity)
+                client.execute(httpPost).withCloseable { resp ->
+                    resp.withCloseable {
+                        String respJson = 
EntityUtils.toString(resp.getEntity())
+                        def respCode = resp.getStatusLine().getStatusCode()
+                        return new ActionResult(respCode, respJson)
+                    }
+                }
+            }
+            if (check != null) {
+                check.call(result.respCode, result.body)
+            } else {
+                if (this.result != null) {
+                    Assert.assertEquals(this.result, result.body)
+                }
+            }
+        } catch (Throwable t) {
+            throw new IllegalStateException("HttpCliAction failed, 
uri:${uri}", t)
+        }
+    }
+
+    class ActionResult {
+        String body
+        int respCode
+
+        ActionResult(int respCode, String body) {
+            this.body = body
+            this.respCode = respCode
+        }
+    }
+
+    void check(@ClosureParams(value = FromString, options = ["int, String"]) 
Closure check) {
+        this.check = check
+    }
+}
diff --git 
a/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy
 
b/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy
index 184422e1f5..ff9a66fd34 100644
--- 
a/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy
+++ 
b/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy
@@ -29,11 +29,13 @@ import org.apache.doris.regression.action.RestoreAction
 import org.apache.doris.regression.action.StreamLoadAction
 import org.apache.doris.regression.action.SuiteAction
 import org.apache.doris.regression.action.TestAction
+import org.apache.doris.regression.action.HttpCliAction
 import org.apache.doris.regression.util.JdbcUtils
 import org.apache.doris.regression.util.Hdfs
 import org.junit.jupiter.api.Assertions
 import org.slf4j.Logger
 import org.slf4j.LoggerFactory
+import groovy.util.logging.Slf4j
 
 import java.util.concurrent.Callable
 import java.util.concurrent.Future
@@ -45,6 +47,7 @@ import static 
org.apache.doris.regression.util.DataUtils.sortByToString
 
 import java.io.File
 
+@Slf4j
 class Suite implements GroovyInterceptable {
     final SuiteContext context
     final String name
@@ -359,6 +362,10 @@ class Suite implements GroovyInterceptable {
         runAction(new RestoreAction(context), actionSupplier)
     }
 
+    void httpTest(Closure actionSupplier) {
+        runAction(new HttpCliAction(context), actionSupplier)
+    }
+
     void runAction(SuiteAction action, Closure actionSupplier) {
         actionSupplier.setDelegate(action)
         actionSupplier.setResolveStrategy(Closure.DELEGATE_FIRST)
diff --git a/regression-test/framework/src/main/groovy/suite.gdsl 
b/regression-test/framework/src/main/groovy/suite.gdsl
index a271168d12..e72afd7c5f 100644
--- a/regression-test/framework/src/main/groovy/suite.gdsl
+++ b/regression-test/framework/src/main/groovy/suite.gdsl
@@ -47,6 +47,7 @@ def bindAction = { actionName, actionClassName ->
 bindAction("test", "org.apache.doris.regression.action.TestAction")
 bindAction("explain", "org.apache.doris.regression.action.ExplainAction")
 bindAction("streamLoad", "org.apache.doris.regression.action.StreamLoadAction")
+bindAction("httpTest", "org.apache.doris.regression.action.HttpCliAction")
 
 // bind qt_xxx and order_qt_xxx methods
 contributor([suiteContext]) {
@@ -94,4 +95,4 @@ contributor([suiteContext]) {
             }
         }
     }
-}
\ No newline at end of file
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to