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]