未验证 提交 44f1b4a4 编写于 作者: D Daming 提交者: GitHub

[test/plugin] Enhance PluginTest (#4677)

1. Re-balance the workload of plugintests
2. Restore testcases of MySQL, remove on #4641
3. Support user to runs plugin-test on debug mode. It will not remove the log files and actualData.yaml
4. remove paramater 'parallel_run_size' and disable parallel test.
上级 4e821415
......@@ -48,9 +48,9 @@ jobs:
- { name: 'elasticsearch-6.x-scenario', title: 'ElasticSearch 6.7.1-6.8.4 (7)' }
- { name: 'elasticsearch-7.x-scenario', title: 'ElasticSearch 7.0.0-7.5.2 (14)' }
- { name: 'feign-scenario', title: 'Feign 9.0.0-9.5.1 (8)' }
- { name: 'finagle-17.10.x-scenario', title: 'Finagle 17.10.0-20.1.0' }
- { name: 'finagle-6.25.x-scenario', title: 'Finagle 6.25.0-6.43.0' }
- { name: 'finagle-6.44.x-scenario', title: 'Finagle 6.44.0-7.1.0' }
- { name: 'finagle-17.10.x-scenario', title: 'Finagle 17.10.0-20.1.0(19)' }
- { name: 'finagle-6.25.x-scenario', title: 'Finagle 6.25.0-6.43.0 (18)' }
- { name: 'finagle-6.44.x-scenario', title: 'Finagle 6.44.0-7.1.0 (4)' }
- { name: 'gateway-scenario', title: 'Spring-Cloud-Gateway 2.1.x (3)' }
- { name: 'grpc-scenario', title: 'gRPC 1.6.0-1.25.0 (22)' }
- { name: 'gson-scenario', title: 'Gson (7)' }
......
......@@ -47,6 +47,7 @@ jobs:
- { name: 'lettuce-scenario', title: 'Lettuce 5.x (17)' }
- { name: 'mongodb-3.x-scenario', title: 'Mongodb 3.4.0-3.11.1 (22)' }
- { name: 'netty-socketio-scenario', title: 'Netty-SocketIO 1.x (4)' }
- { name: 'postgresql-above9.4.1207-scenario', title: 'PostgreSQL 9.4.1207+ (62)' }
steps:
- uses: actions/checkout@v2
- name: checkout submodules
......
......@@ -34,8 +34,7 @@ jobs:
matrix:
case:
- { name: 'okhttp-scenario', title: 'OKHttp 3.0.x-3.14.x (34)' }
- { name: 'play-scenario', title: 'Play! Framework' }
- { name: 'postgresql-above9.4.1207-scenario', title: 'PostgreSQL 9.4.1207+ (62)' }
- { name: 'play-scenario', title: 'Play! Framework (12)' }
- { name: 'postgresql-scenario', title: 'PostgreSQL 9.2.x-9.4.x (36)' }
- { name: 'pulsar-scenario', title: 'Pulsar 2.2.0-2.4.1 (7)' }
- { name: 'rabbitmq-scenario', title: 'RabbitMQ (12)' }
......@@ -49,10 +48,6 @@ jobs:
- { name: 'sofarpc-scenario', title: 'SofaRPC 5.4.0-5.6.2 (23)' }
- { name: 'solrj-7.x-scenario', title: 'SolrJ 7.x (12)' }
- { name: 'spring-3.0.x-scenario', title: 'Spring 3.0.x (8)' }
- { name: 'spring-3.1.x-scenario', title: 'Spring 3.1.x-4.0.x (25)' }
- { name: 'spring-4.1.x-scenario', title: 'Spring 4.1.x-4.2.x (20)' }
- { name: 'spring-4.3.x-scenario', title: 'Spring 4.3.x-5.2.x (54)' }
- { name: 'spring-async-scenario', title: 'Spring Async 4.3.x-5.1.x (35)' }
- { name: 'spring-cloud-feign-1.1.x-scenario', title: 'SpringCloud Feign 1.1.x (8)' }
- { name: 'spring-cloud-feign-1.2.x-scenario', title: 'SpringCloud Feign 1.2.x-1.4.x (23)' }
- { name: 'spring-cloud-feign-2.x-scenario', title: 'SpringCloud Feign 2.x (14)' }
......
......@@ -37,6 +37,10 @@ jobs:
- { name: 'undertow-scenario', title: 'Undertow 1.3.0-2.0.27 (23)' }
- { name: 'webflux-scenario', title: 'Spring-WebFlux 2.x (7)' }
- { name: 'zookeeper-scenario', title: 'Zookeeper 3.4.x (14)' }
- { name: 'spring-3.1.x-scenario', title: 'Spring 3.1.x-4.0.x (25)' }
- { name: 'spring-4.1.x-scenario', title: 'Spring 4.1.x-4.2.x (20)' }
- { name: 'spring-4.3.x-scenario', title: 'Spring 4.3.x-5.2.x (54)' }
- { name: 'spring-async-scenario', title: 'Spring Async 4.3.x-5.1.x (35)' }
steps:
- uses: actions/checkout@v2
- name: checkout submodules
......
......@@ -16,6 +16,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
[[ -n $DEBUG_MODE ]] && set -ex
function exitOnError() {
echo -e "\033[31m[ERROR] $1\033[0m">&2
......@@ -23,8 +24,10 @@ function exitOnError() {
}
function exitAndClean() {
[[ -n $DEBUG_MODE ]] && exit $1;
[[ -f ${SCENARIO_HOME}/data/actualData.yaml ]] && rm -rf ${SCENARIO_HOME}/data/actualData.yaml
[[ -d ${SCENARIO_HOME}/logs ]] && rm -rf ${SCENARIO_HOME}/logs
[[ -d ${LOGS_HOME} ]] && rm -rf ${LOGS_HOME}
exit $1
}
......@@ -52,6 +55,9 @@ fi
TOOLS_HOME=/usr/local/skywalking/tools
SCENARIO_HOME=/usr/local/skywalking/scenario
JACOCO_HOME=${JACOCO_HOME:-/jacoco}
LOGS_HOME=${SCENARIO_HOME}/logs
[[ ! -d $LOGS_HOME ]] && mkdir -p ${LOGS_HOME}
unzip -q ${SCENARIO_HOME}/*.zip -d /var/run/
if [[ ! -f /var/run/${SCENARIO_NAME}/${SCENARIO_START_SCRIPT} ]]; then
......@@ -59,7 +65,7 @@ if [[ ! -f /var/run/${SCENARIO_NAME}/${SCENARIO_START_SCRIPT} ]]; then
fi
echo "To start mock collector"
${TOOLS_HOME}/skywalking-mock-collector/bin/collector-startup.sh 1>/dev/null &
${TOOLS_HOME}/skywalking-mock-collector/bin/collector-startup.sh 1>${LOGS_HOME}/collector.out &
healthCheck http://localhost:12800/receiveData
# start applications
......@@ -71,10 +77,10 @@ export agent_opts="
-Dskywalking.collector.discovery_check_interval=2
-Dskywalking.collector.backend_service=localhost:19876
-Dskywalking.agent.service_name=${SCENARIO_NAME}
-Dskywalking.logging.dir=/usr/local/skywalking/scenario/logs
-Dskywalking.logging.dir=${LOGS_HOME}
-Dskywalking.agent.authentication=test-token
-Xms256m -Xmx256m ${agent_opts}"
exec /var/run/${SCENARIO_NAME}/${SCENARIO_START_SCRIPT} 1>/dev/null &
exec /var/run/${SCENARIO_NAME}/${SCENARIO_START_SCRIPT} 1>${LOGS_HOME}/scenario.out &
healthCheck ${SCENARIO_HEALTH_CHECK_URL}
......@@ -91,7 +97,7 @@ java -jar \
-Xmx256m -Xms256m \
-DcaseName="${SCENARIO_NAME}-${SCENARIO_VERSION}" \
-DtestCasePath=${SCENARIO_HOME}/data/ \
${TOOLS_HOME}/skywalking-validator-tools.jar 1>/dev/null
${TOOLS_HOME}/skywalking-validator-tools.jar 1>${LOGS_HOME}/validatolr.out
status=$?
if [[ $status -eq 0 ]]; then
......
......@@ -107,7 +107,6 @@
JACOCO_HOME=${JACOCO_HOME:-/jacoco}
export AGENT_FILE_PATH=/usr/local/skywalking/scenario/agent
echo "${AGENT_FILE_PATH}/skywalking-agent.jar"
if [ -f "${AGENT_FILE_PATH}/skywalking-agent.jar" ]; then
CATALINA_OPTS="$CATALINA_OPTS
-javaagent:${JACOCO_HOME}/jacocoagent.jar=classdumpdir=${JACOCO_HOME}/classes/${SCENARIO_NAME}${SCENARIO_VERSION},destfile=${JACOCO_HOME}/${SCENARIO_NAME}${SCENARIO_VERSION}.exec,includes=org.apache.skywalking.*,excludes=org.apache.skywalking.apm.dependencies.*:org.apache.skywalking.apm.testcase.*
......@@ -118,7 +117,7 @@ if [ -f "${AGENT_FILE_PATH}/skywalking-agent.jar" ]; then
-Dskywalking.collector.backend_service=localhost:19876
-Dskywalking.agent.service_name=${SCENARIO_NAME}
-Dskywalking.agent.authentication=test-token
-Dskywalking.logging.dir=/usr/local/skywalking/scenario/logs
-Dskywalking.logging.dir=${LOGS_HOME}
-Xms256m -Xmx256m -XX:PermSize=64M -XX:MaxPermSize=64"
fi
......
......@@ -16,14 +16,18 @@
# See the License for the specific language governing permissions and
# limitations under the License.
[[ -n $DEBUG_MODE ]] && set -ex
function exitOnError() {
echo -e "\033[31m[ERROR] $1\033[0m">&2
exitAndClean 1
}
function exitAndClean() {
[[ -n $DEBUG_MODE ]] && exit $1
[[ -f ${SCENARIO_HOME}/data/actualData.yaml ]] && rm -rf ${SCENARIO_HOME}/data/actualData.yaml
[[ -d ${SCENARIO_HOME}/logs ]] && rm -rf ${SCENARIO_HOME}/logs
[[ -d ${LOGS_HOME} ]] && rm -rf ${LOGS_HOME}
exit $1
}
......@@ -46,6 +50,9 @@ function healthCheck() {
TOOLS_HOME=/usr/local/skywalking/tools
SCENARIO_HOME=/usr/local/skywalking/scenario
export LOGS_HOME=${SCENARIO_HOME}/logs # share to catalina.sh
[[ ! -d ${LOGS_HOME} ]] && mkdir $LOGS_HOME
# Speed up launch tomcat
rm /usr/local/tomcat/webapps/* -rf # remove needn't app
......@@ -56,11 +63,11 @@ cp ${SCENARIO_HOME}/*.war /usr/local/tomcat/webapps/
# start mock collector
echo "To start mock collector"
${TOOLS_HOME}/skywalking-mock-collector/bin/collector-startup.sh 1>/dev/null &
${TOOLS_HOME}/skywalking-mock-collector/bin/collector-startup.sh 1>${LOGS_HOME}/collector.out &
healthCheck http://localhost:12800/receiveData
echo "To start tomcat"
/usr/local/tomcat/bin/catalina.sh start 1>/dev/null &
/usr/local/tomcat/bin/catalina.sh start 1>${LOGS_HOME}/catalina.out &
healthCheck ${SCENARIO_HEALTH_CHECK_URL}
......@@ -77,7 +84,7 @@ java -jar \
-Xmx256m -Xms256m \
-DcaseName="${SCENARIO_NAME}-${SCENARIO_VERSION}" \
-DtestCasePath=${SCENARIO_HOME}/data/ \
${TOOLS_HOME}/skywalking-validator-tools.jar 1>/dev/null
${TOOLS_HOME}/skywalking-validator-tools.jar 1>${LOGS_HOME}/validator.out
status=$?
if [[ $status -eq 0 ]]; then
......
......@@ -20,20 +20,21 @@ set -ex
home="$(cd "$(dirname $0)"; pwd)"
scenario_name=""
parallel_run_size=1
force_build="off"
cleanup="off"
debug_mode=
mvnw=${home}/../../mvnw
agent_home="${home}"/../../skywalking-agent
jacoco_home="${home}"/../jacoco
scenarios_home="${home}/scenarios"
num_of_testcases=0
print_help() {
echo "Usage: run.sh [OPTION] SCENARIO_NAME"
echo -e "\t-f, --force_build \t\t do force to build Plugin-Test tools and images"
echo -e "\t--parallel_run_size, \t\t parallel size of test cases. Default: 1"
echo -e "\t--cleanup, \t\t\t remove the related images and directories"
echo -e "\t--debug, \t\t\t to save the log files and actualData.yaml"
}
parse_commandline() {
......@@ -47,22 +48,13 @@ parse_commandline() {
--cleanup)
cleanup="on"
;;
--parallel_run_size)
test $# -lt 2 && exitWithMessage "Missing value for the optional argument '$_key'."
parallel_run_size="$2"
shift
;;
--parallel_run_size=*)
parallel_run_size="${_key##--parallel_run_size=}"
--debug)
debug_mode="on";
;;
-h|--help)
print_help
exit 0
;;
-h*)
print_help
exit 0
;;
*)
scenario_name=$1
;;
......@@ -78,10 +70,8 @@ exitWithMessage() {
exitAndClean() {
elapsed=$(( `date +%s` - $start_stamp ))
num_of_testcases="`ls -l ${task_state_house} |grep -c FINISH`"
[[ $1 -eq 1 ]] && printSystemInfo
printf "Scenarios: %s, Testcases: %d, parallel_run_size: %d, Elapsed: %02d:%02d:%02d \n" \
${scenario_name} "${num_of_testcases}" "${parallel_run_size}" \
printf "Scenarios: ${scenario_name}, Testcases: ${num_of_testcases}, Elapsed: %02d:%02d:%02d \n" \
$(( ${elapsed}/3600 )) $(( ${elapsed}%3600/60 )) $(( ${elapsed}%60 ))
exit $1
}
......@@ -90,17 +80,6 @@ printSystemInfo(){
bash ${home}/script/systeminfo.sh
}
waitForAvailable() {
while [[ `ls -l ${task_state_house} |grep -c RUNNING` -ge ${parallel_run_size} ]]
do
sleep 2
done
if [[ `ls -l ${task_state_house} |grep -c FAILURE` -gt 0 ]]; then
exitAndClean 1
fi
}
do_cleanup() {
images=$(docker images -q "skywalking/agent-test-*:${BUILD_NO:=local}")
[[ -n "${images}" ]] && docker rmi -f ${images}
......@@ -155,9 +134,7 @@ fi
[[ "$force_build" == "on" ]] && ${mvnw} --batch-mode -f ${home}/pom.xml clean package -DskipTests -DBUILD_NO=${BUILD_NO:=local} docker:build
workspace="${home}/workspace/${scenario_name}"
task_state_house="${workspace}/.states"
[[ -d ${workspace} ]] && rm -rf $workspace
mkdir -p ${task_state_house}
plugin_runner_helper="${home}/dist/plugin-runner-helper.jar"
if [[ ! -f ${plugin_runner_helper} ]]; then
......@@ -211,27 +188,23 @@ do
-Doutput.dir=${case_work_base} \
-Dagent.dir=${_agent_home} \
-Djacoco.home=${jacoco_home} \
-Ddebug.mode=${debug_mode} \
-Ddocker.image.version=${BUILD_NO:=local} \
${plugin_runner_helper} 1>${case_work_logs_dir}/helper.log
[[ $? -ne 0 ]] && exitWithMessage "${testcase_name}, generate script failure!"
echo "start container of testcase.name=${testcase_name}"
bash ${case_work_base}/scenario.sh ${task_state_house} 1>${case_work_logs_dir}/${testcase_name}.log
sleep 3
waitForAvailable
rm -rf ${case_work_base}
bash ${case_work_base}/scenario.sh $debug_mode 1>${case_work_logs_dir}/${testcase_name}.log
status=$?
if [[ $status == 0 ]]; then
[[ -z $debug_mode ]] && rm -rf ${case_work_base}
else
exitWithMessage "Testcase ${testcase_name} failed!"
fi
num_of_testcases=$(($num_of_testcases+1))
done
echo -e "\033[33m${scenario_name} has already sumbitted\033[0m"
# wait to finish
while [[ `ls -l ${task_state_house} |grep -c RUNNING` -gt 0 ]]; do
sleep 1
done
if [[ `ls -l ${task_state_house} |grep -c FAILURE` -gt 0 ]]; then
exitAndClean 1
fi
exitAndClean 0
......@@ -160,6 +160,11 @@ public class ConfigurationImpl implements IConfiguration {
return System.getProperty("jacoco.home");
}
@Override
public String debugMode() {
return System.getProperty("debug.mode");
}
@Override
public Map<String, Object> toMap() {
final Map<String, Object> root = new HashMap<>();
......@@ -176,6 +181,7 @@ public class ConfigurationImpl implements IConfiguration {
root.put("docker_image_version", dockerImageVersion());
root.put("docker_container_name", dockerContainerName());
root.put("jacoco_home", jacocoHome());
root.put("debug_mode", debugMode());
root.put("expose", caseConfiguration().getExpose());
root.put("hostname", caseConfiguration().getHostname());
......
......@@ -56,6 +56,8 @@ public interface IConfiguration {
String jacocoHome();
String debugMode();
Map<String, Object> toMap();
String extendEntryHeader();
......
......@@ -30,6 +30,9 @@ docker run \
<#if catalina_opts??>
--env CATALINA_OPTS=${catalina_opts} \
</#if>
<#if debug_mode??>
--env DEBUG_MODE=${debug_mode} \
</#if>
-v ${agent_home}:/usr/local/skywalking/scenario/agent \
-v ${scenario_home}:/usr/local/skywalking/scenario \
-v ${jacoco_home}:/jacoco \
......
......@@ -16,22 +16,16 @@
# See the License for the specific language governing permissions and
# limitations under the License.
[[ -n $1 ]] && set -ex
PRG="$0"
PRGDIR=`dirname "$PRG"`
[ -z "$SCENARIO_HOME" ] && SCENARIO_HOME=`cd "$PRGDIR" >/dev/null; pwd`
state_house=$1
testcase_name=${scenario_name}-${scenario_version}
status=1
<#noparse>touch ${state_house}/${testcase_name}.RUNNING</#noparse>
${running_script}
<#noparse>
if [[ ${status} -eq 0 ]]; then
mv ${state_house}/${testcase_name}.RUNNING ${state_house}/${testcase_name}.FINISH
else
mv ${state_house}/${testcase_name}.RUNNING ${state_house}/${testcase_name}.FAILURE
fi
</#noparse>
exit $status
\ No newline at end of file
......@@ -36,4 +36,13 @@
5.1.26
5.1.24
5.1.22
5.1.20
\ No newline at end of file
5.1.20
5.1.18
5.1.16
5.1.14
5.1.12
5.1.10
5.1.8
5.1.6
5.1.4
5.1.2
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册