Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
山不在高_有仙则灵
SkyWalking
提交
be3db679
S
SkyWalking
项目概览
山不在高_有仙则灵
/
SkyWalking
与 Fork 源项目一致
Fork自
apache / SkyWalking
通知
12
Star
0
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
SkyWalking
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
be3db679
编写于
10月 27, 2019
作者:
P
panjuan
提交者:
kezhenxu94
10月 27, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add E2E test for MySQL storage. (#3648)
上级
2e2616d0
变更
17
隐藏空白更改
内联
并排
Showing
17 changed file
with
929 addition
and
1 deletion
+929
-1
Jenkinsfile-E2E
Jenkinsfile-E2E
+6
-0
test/e2e/e2e-mysql/pom.xml
test/e2e/e2e-mysql/pom.xml
+170
-0
test/e2e/e2e-mysql/src/docker/rc.d/rc0-prepare.sh
test/e2e/e2e-mysql/src/docker/rc.d/rc0-prepare.sh
+30
-0
test/e2e/e2e-mysql/src/docker/rc.d/rc1-startup.sh
test/e2e/e2e-mysql/src/docker/rc.d/rc1-startup.sh
+40
-0
test/e2e/e2e-mysql/src/main/java/org/apache/skywalking/e2e/sample/client/SampleClientApplication.java
...skywalking/e2e/sample/client/SampleClientApplication.java
+34
-0
test/e2e/e2e-mysql/src/main/java/org/apache/skywalking/e2e/sample/client/TestController.java
...g/apache/skywalking/e2e/sample/client/TestController.java
+49
-0
test/e2e/e2e-mysql/src/main/java/org/apache/skywalking/e2e/sample/client/User.java
...in/java/org/apache/skywalking/e2e/sample/client/User.java
+56
-0
test/e2e/e2e-mysql/src/main/java/org/apache/skywalking/e2e/sample/client/UserRepo.java
...ava/org/apache/skywalking/e2e/sample/client/UserRepo.java
+27
-0
test/e2e/e2e-mysql/src/main/resources/application.yml
test/e2e/e2e-mysql/src/main/resources/application.yml
+35
-0
test/e2e/e2e-mysql/src/test/java/org/apache/skywalking/e2e/SampleVerificationITCase.java
...a/org/apache/skywalking/e2e/SampleVerificationITCase.java
+316
-0
test/e2e/e2e-mysql/src/test/resources/expected-data/org.apache.skywalking.e2e.SampleVerificationITCase.endpoints.yml
...che.skywalking.e2e.SampleVerificationITCase.endpoints.yml
+27
-0
test/e2e/e2e-mysql/src/test/resources/expected-data/org.apache.skywalking.e2e.SampleVerificationITCase.instances.yml
...che.skywalking.e2e.SampleVerificationITCase.instances.yml
+34
-0
test/e2e/e2e-mysql/src/test/resources/expected-data/org.apache.skywalking.e2e.SampleVerificationITCase.services.yml
...ache.skywalking.e2e.SampleVerificationITCase.services.yml
+25
-0
test/e2e/e2e-mysql/src/test/resources/expected-data/org.apache.skywalking.e2e.SampleVerificationITCase.topo.yml
...g.apache.skywalking.e2e.SampleVerificationITCase.topo.yml
+46
-0
test/e2e/e2e-mysql/src/test/resources/expected-data/org.apache.skywalking.e2e.SampleVerificationITCase.traces.yml
...apache.skywalking.e2e.SampleVerificationITCase.traces.yml
+31
-0
test/e2e/pom.xml
test/e2e/pom.xml
+2
-0
test/e2e/run.sh
test/e2e/run.sh
+1
-1
未找到文件。
Jenkinsfile-E2E
浏览文件 @
be3db679
...
...
@@ -83,6 +83,12 @@ pipeline {
sh 'E2E_VERSION=jdk8-1.3 bash -x test/e2e/run.sh e2e-single-service'
}
}
stage('Single Node Tests(MySQL/JDK8)') {
steps {
sh 'E2E_VERSION=jdk8-1.3 bash -x test/e2e/run.sh e2e-mysql'
}
}
stage('Single Node Tests(JDK9)') {
steps {
...
...
test/e2e/e2e-mysql/pom.xml
0 → 100755
浏览文件 @
be3db679
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ 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.
~
-->
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<parent>
<artifactId>
apache-skywalking-e2e
</artifactId>
<groupId>
org.apache.skywalking
</groupId>
<version>
1.0.0
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
e2e-mysql
</artifactId>
<properties>
<e2e.container.name.prefix>
skywalking-e2e-container-${build.id}-single-node-mysql
</e2e.container.name.prefix>
</properties>
<dependencies>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-data-jpa
</artifactId>
<version>
${spring.boot.version}
</version>
</dependency>
<dependency>
<groupId>
com.h2database
</groupId>
<artifactId>
h2
</artifactId>
<version>
${h2.version}
</version>
</dependency>
<dependency>
<groupId>
org.apache.skywalking
</groupId>
<artifactId>
e2e-base
</artifactId>
<version>
${project.version}
</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
<version>
${spring.boot.version}
</version>
<configuration>
<executable>
true
</executable>
<addResources>
true
</addResources>
<excludeDevtools>
true
</excludeDevtools>
</configuration>
<executions>
<execution>
<goals>
<goal>
repackage
</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>
io.fabric8
</groupId>
<artifactId>
docker-maven-plugin
</artifactId>
<configuration>
<containerNamePattern>
%a-%t-%i
</containerNamePattern>
<images>
<image>
<name>
mysql/mysql-server:${mysql.version}
</name>
<alias>
${e2e.container.name.prefix}-mysql
</alias>
<run>
<wait>
<log>
Socket: '/var/run/mysqld/mysqlx.sock' bind-address: '::' port: 3306
</log>
<time>
120000
</time>
</wait>
<env>
<MYSQL_ROOT_PASSWORD>
root@1234
</MYSQL_ROOT_PASSWORD>
<MYSQL_DATABASE>
swtest
</MYSQL_DATABASE>
<MYSQL_ROOT_HOST>
%
</MYSQL_ROOT_HOST>
</env>
<ports>
<port>
mysql.port:3306
</port>
</ports>
</run>
</image>
<image>
<name>
skyapm/e2e-container:${e2e.container.version}
</name>
<alias>
${e2e.container.name.prefix}
</alias>
<run>
<env>
<INSTRUMENTED_SERVICE>
${project.build.finalName}.jar
</INSTRUMENTED_SERVICE>
<SW_JDBC_URL>
jdbc:mysql://${e2e.container.name.prefix}-mysql:3306/swtest
</SW_JDBC_URL>
</env>
<dependsOn>
<container>
${e2e.container.name.prefix}-mysql
</container>
</dependsOn>
<links>
<link>
${e2e.container.name.prefix}-mysql
</link>
</links>
<ports>
<port>
+webapp.host:webapp.port:8081
</port>
<port>
+client.host:client.port:9090
</port>
</ports>
<volumes>
<bind>
<volume>
${sw.home}:/sw
</volume>
<volume>
${project.build.directory}:/home
</volume>
<volume>
${project.basedir}/src/docker/rc.d:/rc.d:ro
</volume>
</bind>
</volumes>
<wait>
<http>
<url>
http://${docker.host.address}:${client.port}/e2e/health-check
</url>
<method>
GET
</method>
<status>
200
</status>
</http>
<time>
300000
</time>
</wait>
</run>
</image>
</images>
</configuration>
</plugin>
<!-- set the system properties that can be used in test codes -->
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-failsafe-plugin
</artifactId>
<configuration>
<systemPropertyVariables>
<sw.webapp.host>
${webapp.host}
</sw.webapp.host>
<sw.webapp.port>
${webapp.port}
</sw.webapp.port>
<client.host>
${client.host}
</client.host>
<client.port>
${client.port}
</client.port>
</systemPropertyVariables>
</configuration>
<executions>
<execution>
<goals>
<goal>
verify
</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
test/e2e/e2e-mysql/src/docker/rc.d/rc0-prepare.sh
0 → 100755
浏览文件 @
be3db679
#!/usr/bin/env bash
# Licensed to the SkyAPM 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.
MYSQL_URL
=
"http://central.maven.org/maven2/mysql/mysql-connector-java/8.0.13/mysql-connector-java-8.0.13.jar"
MYSQL_DRIVER
=
"mysql-connector-java-8.0.13.jar"
TMP_APP_YML
=
"tmp_app.yml"
echo
"MySQL database is storage provider..."
# Download MySQL connector.
curl
${
MYSQL_URL
}
>
"
${
SW_HOME
}
/oap-libs/
${
MYSQL_DRIVER
}
"
[[
$?
-ne
0
]]
&&
echo
"Fail to download
${
MYSQL_DRIVER
}
."
&&
exit
1
# Modify application.yml to set MySQL as storage provider.
cat
"
${
SW_HOME
}
/config/application.yml"
|
sed
'/elasticsearch/,/mysql/d'
|
sed
"/storage:/a
\
mysql:"
|
sed
"/storage:/,/receiver-sharing-server:/s/#//"
>
${
TMP_APP_YML
}
cat
${
TMP_APP_YML
}
>
"
${
SW_HOME
}
/config/application.yml"
rm
-f
${
TMP_APP_YML
}
test/e2e/e2e-mysql/src/docker/rc.d/rc1-startup.sh
0 → 100755
浏览文件 @
be3db679
#!/usr/bin/env bash
# Licensed to the SkyAPM 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.
echo
'starting OAP server...'
&&
start_oap
'init'
echo
'starting Web app...'
&&
start_webapp
'0.0.0.0'
8081
echo
'starting instrumented services...'
&&
start_instrumented_services
check_tcp 127.0.0.1
\
9090
\
60
\
10
\
"waiting for the instrumented service to be ready"
if
[[
$?
-ne
0
]]
;
then
echo
"instrumented service 0 failed to start in 30 * 10 seconds: "
cat
${
SERVICE_LOG
}
/
*
exit
1
fi
echo
"SkyWalking e2e container is ready for tests"
tail
-f
${
OAP_LOG_DIR
}
/
*
\
${
WEBAPP_LOG_DIR
}
/
*
\
${
SERVICE_LOG
}
/
*
test/e2e/e2e-mysql/src/main/java/org/apache/skywalking/e2e/sample/client/SampleClientApplication.java
0 → 100644
浏览文件 @
be3db679
/*
* 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.skywalking.e2e.sample.client
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.data.jpa.repository.config.EnableJpaRepositories
;
/**
* @author kezhenxu94
*/
@EnableJpaRepositories
@SpringBootApplication
public
class
SampleClientApplication
{
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
SampleClientApplication
.
class
,
args
);
}
}
test/e2e/e2e-mysql/src/main/java/org/apache/skywalking/e2e/sample/client/TestController.java
0 → 100644
浏览文件 @
be3db679
/*
* 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.skywalking.e2e.sample.client
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* @author kezhenxu94
*/
@RestController
@RequestMapping
(
"/e2e"
)
public
class
TestController
{
private
final
UserRepo
userRepo
;
public
TestController
(
final
UserRepo
userRepo
)
{
this
.
userRepo
=
userRepo
;
}
@GetMapping
(
"/health-check"
)
public
String
hello
()
{
return
"healthy"
;
}
@PostMapping
(
"/users"
)
public
User
createAuthor
(
@RequestBody
final
User
user
)
throws
InterruptedException
{
Thread
.
sleep
(
1000L
);
return
userRepo
.
save
(
user
);
}
}
test/e2e/e2e-mysql/src/main/java/org/apache/skywalking/e2e/sample/client/User.java
0 → 100644
浏览文件 @
be3db679
/*
* 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.skywalking.e2e.sample.client
;
import
javax.persistence.Column
;
import
javax.persistence.Entity
;
import
javax.persistence.GeneratedValue
;
import
javax.persistence.Id
;
/**
* @author kezhenxu94
*/
@Entity
public
class
User
{
public
User
()
{
}
@Id
@GeneratedValue
private
Long
id
;
@Column
private
String
name
;
public
Long
getId
()
{
return
id
;
}
public
void
setId
(
final
Long
id
)
{
this
.
id
=
id
;
}
public
String
getName
()
{
return
name
;
}
public
void
setName
(
final
String
name
)
{
this
.
name
=
name
;
}
}
test/e2e/e2e-mysql/src/main/java/org/apache/skywalking/e2e/sample/client/UserRepo.java
0 → 100644
浏览文件 @
be3db679
/*
* 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.skywalking.e2e.sample.client
;
import
org.springframework.data.jpa.repository.JpaRepository
;
/**
* @author kezhenxu94
*/
public
interface
UserRepo
extends
JpaRepository
<
User
,
Long
>
{
}
test/e2e/e2e-mysql/src/main/resources/application.yml
0 → 100644
浏览文件 @
be3db679
# 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.
server
:
port
:
9090
spring
:
main
:
banner-mode
:
'
off'
datasource
:
url
:
jdbc:h2:mem:testdb
driver-class-name
:
org.h2.Driver
data-username
:
sa
password
:
sa
platform
:
org.hibernate.dialect.H2Dialect
jpa
:
generate-ddl
:
true
hibernate
:
ddl-auto
:
create-drop
properties
:
hibernate.format_sql
:
true
show-sql
:
true
test/e2e/e2e-mysql/src/test/java/org/apache/skywalking/e2e/SampleVerificationITCase.java
0 → 100644
浏览文件 @
be3db679
/*
* 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.skywalking.e2e
;
import
org.apache.skywalking.e2e.metrics.AtLeastOneOfMetricsMatcher
;
import
org.apache.skywalking.e2e.metrics.Metrics
;
import
org.apache.skywalking.e2e.metrics.MetricsQuery
;
import
org.apache.skywalking.e2e.metrics.MetricsValueMatcher
;
import
org.apache.skywalking.e2e.service.Service
;
import
org.apache.skywalking.e2e.service.ServicesMatcher
;
import
org.apache.skywalking.e2e.service.ServicesQuery
;
import
org.apache.skywalking.e2e.service.endpoint.Endpoint
;
import
org.apache.skywalking.e2e.service.endpoint.EndpointQuery
;
import
org.apache.skywalking.e2e.service.endpoint.Endpoints
;
import
org.apache.skywalking.e2e.service.endpoint.EndpointsMatcher
;
import
org.apache.skywalking.e2e.service.instance.Instance
;
import
org.apache.skywalking.e2e.service.instance.Instances
;
import
org.apache.skywalking.e2e.service.instance.InstancesMatcher
;
import
org.apache.skywalking.e2e.service.instance.InstancesQuery
;
import
org.apache.skywalking.e2e.topo.TopoData
;
import
org.apache.skywalking.e2e.topo.TopoMatcher
;
import
org.apache.skywalking.e2e.topo.TopoQuery
;
import
org.apache.skywalking.e2e.trace.Trace
;
import
org.apache.skywalking.e2e.trace.TracesMatcher
;
import
org.apache.skywalking.e2e.trace.TracesQuery
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.core.io.ClassPathResource
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.test.annotation.DirtiesContext
;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner
;
import
org.springframework.web.client.RestTemplate
;
import
org.yaml.snakeyaml.Yaml
;
import
java.io.InputStream
;
import
java.time.LocalDateTime
;
import
java.time.ZoneOffset
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
static
org
.
apache
.
skywalking
.
e2e
.
metrics
.
MetricsQuery
.
ALL_ENDPOINT_METRICS
;
import
static
org
.
apache
.
skywalking
.
e2e
.
metrics
.
MetricsQuery
.
ALL_INSTANCE_METRICS
;
import
static
org
.
apache
.
skywalking
.
e2e
.
metrics
.
MetricsQuery
.
ALL_SERVICE_METRICS
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
/**
* @author kezhenxu94
*/
@RunWith
(
SpringJUnit4ClassRunner
.
class
)
public
class
SampleVerificationITCase
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
SampleVerificationITCase
.
class
);
private
final
RestTemplate
restTemplate
=
new
RestTemplate
();
private
final
int
retryInterval
=
30
;
private
SimpleQueryClient
queryClient
;
private
String
instrumentedServiceUrl
;
@Before
public
void
setUp
()
{
final
String
swWebappHost
=
System
.
getProperty
(
"sw.webapp.host"
,
"127.0.0.1"
);
final
String
swWebappPort
=
System
.
getProperty
(
"sw.webapp.port"
,
"32783"
);
final
String
instrumentedServiceHost
=
System
.
getProperty
(
"client.host"
,
"127.0.0.1"
);
final
String
instrumentedServicePort
=
System
.
getProperty
(
"client.port"
,
"32782"
);
queryClient
=
new
SimpleQueryClient
(
swWebappHost
,
swWebappPort
);
instrumentedServiceUrl
=
"http://"
+
instrumentedServiceHost
+
":"
+
instrumentedServicePort
;
}
@Test
@DirtiesContext
public
void
verify
()
throws
Exception
{
final
LocalDateTime
minutesAgo
=
LocalDateTime
.
now
(
ZoneOffset
.
UTC
);
while
(
true
)
{
try
{
final
Map
<
String
,
String
>
user
=
new
HashMap
<>();
user
.
put
(
"name"
,
"SkyWalking"
);
final
ResponseEntity
<
String
>
responseEntity
=
restTemplate
.
postForEntity
(
instrumentedServiceUrl
+
"/e2e/users"
,
user
,
String
.
class
);
LOGGER
.
info
(
"responseEntity: {}"
,
responseEntity
);
assertThat
(
responseEntity
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
final
List
<
Trace
>
traces
=
queryClient
.
traces
(
new
TracesQuery
()
.
start
(
minutesAgo
)
.
end
(
LocalDateTime
.
now
())
.
orderByDuration
()
);
if
(!
traces
.
isEmpty
())
{
break
;
}
Thread
.
sleep
(
10000L
);
}
catch
(
Exception
ignored
)
{
}
}
doRetryableVerification
(()
->
{
try
{
verifyTraces
(
minutesAgo
);
}
catch
(
Exception
e
)
{
LOGGER
.
warn
(
e
.
getMessage
(),
e
);
}
});
doRetryableVerification
(()
->
{
try
{
verifyServices
(
minutesAgo
);
}
catch
(
Exception
e
)
{
LOGGER
.
warn
(
e
.
getMessage
(),
e
);
}
});
doRetryableVerification
(()
->
{
try
{
verifyTopo
(
minutesAgo
);
}
catch
(
Exception
e
)
{
LOGGER
.
warn
(
e
.
getMessage
(),
e
);
}
});
}
private
void
verifyTopo
(
LocalDateTime
minutesAgo
)
throws
Exception
{
final
LocalDateTime
now
=
LocalDateTime
.
now
(
ZoneOffset
.
UTC
);
final
TopoData
topoData
=
queryClient
.
topo
(
new
TopoQuery
()
.
stepByMinute
()
.
start
(
minutesAgo
.
minusDays
(
1
))
.
end
(
now
)
);
LOGGER
.
info
(
"topoData: {}"
,
topoData
);
InputStream
expectedInputStream
=
new
ClassPathResource
(
"expected-data/org.apache.skywalking.e2e.SampleVerificationITCase.topo.yml"
).
getInputStream
();
final
TopoMatcher
topoMatcher
=
new
Yaml
().
loadAs
(
expectedInputStream
,
TopoMatcher
.
class
);
topoMatcher
.
verify
(
topoData
);
}
private
void
verifyServices
(
LocalDateTime
minutesAgo
)
throws
Exception
{
final
LocalDateTime
now
=
LocalDateTime
.
now
(
ZoneOffset
.
UTC
);
final
List
<
Service
>
services
=
queryClient
.
services
(
new
ServicesQuery
()
.
start
(
minutesAgo
)
.
end
(
now
)
);
LOGGER
.
info
(
"services: {}"
,
services
);
InputStream
expectedInputStream
=
new
ClassPathResource
(
"expected-data/org.apache.skywalking.e2e.SampleVerificationITCase.services.yml"
).
getInputStream
();
final
ServicesMatcher
servicesMatcher
=
new
Yaml
().
loadAs
(
expectedInputStream
,
ServicesMatcher
.
class
);
servicesMatcher
.
verify
(
services
);
for
(
Service
service
:
services
)
{
LOGGER
.
info
(
"verifying service instances: {}"
,
service
);
verifyServiceMetrics
(
service
);
Instances
instances
=
verifyServiceInstances
(
minutesAgo
,
now
,
service
);
verifyInstancesMetrics
(
instances
);
Endpoints
endpoints
=
verifyServiceEndpoints
(
minutesAgo
,
now
,
service
);
verifyEndpointsMetrics
(
endpoints
);
}
}
private
Instances
verifyServiceInstances
(
LocalDateTime
minutesAgo
,
LocalDateTime
now
,
Service
service
)
throws
Exception
{
InputStream
expectedInputStream
;
Instances
instances
=
queryClient
.
instances
(
new
InstancesQuery
()
.
serviceId
(
service
.
getKey
())
.
start
(
minutesAgo
)
.
end
(
now
)
);
LOGGER
.
info
(
"instances: {}"
,
instances
);
expectedInputStream
=
new
ClassPathResource
(
"expected-data/org.apache.skywalking.e2e.SampleVerificationITCase.instances.yml"
).
getInputStream
();
final
InstancesMatcher
instancesMatcher
=
new
Yaml
().
loadAs
(
expectedInputStream
,
InstancesMatcher
.
class
);
instancesMatcher
.
verify
(
instances
);
return
instances
;
}
private
Endpoints
verifyServiceEndpoints
(
LocalDateTime
minutesAgo
,
LocalDateTime
now
,
Service
service
)
throws
Exception
{
Endpoints
instances
=
queryClient
.
endpoints
(
new
EndpointQuery
().
serviceId
(
service
.
getKey
())
);
LOGGER
.
info
(
"instances: {}"
,
instances
);
InputStream
expectedInputStream
=
new
ClassPathResource
(
"expected-data/org.apache.skywalking.e2e.SampleVerificationITCase.endpoints.yml"
).
getInputStream
();
final
EndpointsMatcher
endpointsMatcher
=
new
Yaml
().
loadAs
(
expectedInputStream
,
EndpointsMatcher
.
class
);
endpointsMatcher
.
verify
(
instances
);
return
instances
;
}
private
void
verifyInstancesMetrics
(
Instances
instances
)
throws
Exception
{
for
(
Instance
instance
:
instances
.
getInstances
())
{
for
(
String
metricsName
:
ALL_INSTANCE_METRICS
)
{
LOGGER
.
info
(
"verifying service instance response time: {}"
,
instance
);
final
Metrics
instanceMetrics
=
queryClient
.
metrics
(
new
MetricsQuery
()
.
stepByMinute
()
.
metricsName
(
metricsName
)
.
id
(
instance
.
getKey
())
);
LOGGER
.
info
(
"instanceMetrics: {}"
,
instanceMetrics
);
AtLeastOneOfMetricsMatcher
instanceRespTimeMatcher
=
new
AtLeastOneOfMetricsMatcher
();
MetricsValueMatcher
greaterThanZero
=
new
MetricsValueMatcher
();
greaterThanZero
.
setValue
(
"gt 0"
);
instanceRespTimeMatcher
.
setValue
(
greaterThanZero
);
instanceRespTimeMatcher
.
verify
(
instanceMetrics
);
LOGGER
.
info
(
"{}: {}"
,
metricsName
,
instanceMetrics
);
}
}
}
private
void
verifyEndpointsMetrics
(
Endpoints
endpoints
)
throws
Exception
{
for
(
Endpoint
endpoint
:
endpoints
.
getEndpoints
())
{
if
(!
endpoint
.
getLabel
().
equals
(
"/e2e/users"
))
{
continue
;
}
for
(
String
metricName
:
ALL_ENDPOINT_METRICS
)
{
LOGGER
.
info
(
"verifying endpoint {}, metrics: {}"
,
endpoint
,
metricName
);
final
Metrics
metrics
=
queryClient
.
metrics
(
new
MetricsQuery
()
.
stepByMinute
()
.
metricsName
(
metricName
)
.
id
(
endpoint
.
getKey
())
);
LOGGER
.
info
(
"metrics: {}"
,
metrics
);
AtLeastOneOfMetricsMatcher
instanceRespTimeMatcher
=
new
AtLeastOneOfMetricsMatcher
();
MetricsValueMatcher
greaterThanZero
=
new
MetricsValueMatcher
();
greaterThanZero
.
setValue
(
"gt 0"
);
instanceRespTimeMatcher
.
setValue
(
greaterThanZero
);
instanceRespTimeMatcher
.
verify
(
metrics
);
LOGGER
.
info
(
"{}: {}"
,
metricName
,
metrics
);
}
}
}
private
void
verifyServiceMetrics
(
Service
service
)
throws
Exception
{
for
(
String
metricName
:
ALL_SERVICE_METRICS
)
{
LOGGER
.
info
(
"verifying service {}, metrics: {}"
,
service
,
metricName
);
final
Metrics
serviceMetrics
=
queryClient
.
metrics
(
new
MetricsQuery
()
.
stepByMinute
()
.
metricsName
(
metricName
)
.
id
(
service
.
getKey
())
);
LOGGER
.
info
(
"serviceMetrics: {}"
,
serviceMetrics
);
AtLeastOneOfMetricsMatcher
instanceRespTimeMatcher
=
new
AtLeastOneOfMetricsMatcher
();
MetricsValueMatcher
greaterThanZero
=
new
MetricsValueMatcher
();
greaterThanZero
.
setValue
(
"gt 0"
);
instanceRespTimeMatcher
.
setValue
(
greaterThanZero
);
instanceRespTimeMatcher
.
verify
(
serviceMetrics
);
LOGGER
.
info
(
"{}: {}"
,
metricName
,
serviceMetrics
);
}
}
private
void
verifyTraces
(
LocalDateTime
minutesAgo
)
throws
Exception
{
final
LocalDateTime
now
=
LocalDateTime
.
now
(
ZoneOffset
.
UTC
);
final
List
<
Trace
>
traces
=
queryClient
.
traces
(
new
TracesQuery
()
.
start
(
minutesAgo
)
.
end
(
now
)
.
orderByDuration
()
);
LOGGER
.
info
(
"traces: {}"
,
traces
);
InputStream
expectedInputStream
=
new
ClassPathResource
(
"expected-data/org.apache.skywalking.e2e.SampleVerificationITCase.traces.yml"
).
getInputStream
();
final
TracesMatcher
tracesMatcher
=
new
Yaml
().
loadAs
(
expectedInputStream
,
TracesMatcher
.
class
);
tracesMatcher
.
verify
(
traces
);
}
private
void
doRetryableVerification
(
Runnable
runnable
)
throws
InterruptedException
{
while
(
true
)
{
try
{
runnable
.
run
();
break
;
}
catch
(
Throwable
ignored
)
{
Thread
.
sleep
(
retryInterval
);
}
}
}
}
test/e2e/e2e-mysql/src/test/resources/expected-data/org.apache.skywalking.e2e.SampleVerificationITCase.endpoints.yml
0 → 100644
浏览文件 @
be3db679
# 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.
# 1 health-check by docker-maven-plugin
# 1 drop table if exists, because we have `ddl-auto: create-drop`
# 1 drop sequence
# 1 create sequence
# 1 create table statement
endpoints
:
-
key
:
not
null
label
:
/e2e/health-check
-
key
:
not
null
label
:
/e2e/users
test/e2e/e2e-mysql/src/test/resources/expected-data/org.apache.skywalking.e2e.SampleVerificationITCase.instances.yml
0 → 100644
浏览文件 @
be3db679
# 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.
# 1 health-check by docker-maven-plugin
# 1 drop table if exists, because we have `ddl-auto: create-drop`
# 1 drop sequence
# 1 create sequence
# 1 create table statement
instances
:
-
key
:
2
label
:
not
null
attributes
:
-
name
:
os_name
value
:
not
null
-
name
:
host_name
value
:
not
null
-
name
:
process_no
value
:
gt
0
-
name
:
ipv4s
value
:
not
null
test/e2e/e2e-mysql/src/test/resources/expected-data/org.apache.skywalking.e2e.SampleVerificationITCase.services.yml
0 → 100644
浏览文件 @
be3db679
# 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.
# 1 health-check by docker-maven-plugin
# 1 drop table if exists, because we have `ddl-auto: create-drop`
# 1 drop sequence
# 1 create sequence
# 1 create table statement
services
:
-
key
:
2
label
:
"
Your_ApplicationName"
test/e2e/e2e-mysql/src/test/resources/expected-data/org.apache.skywalking.e2e.SampleVerificationITCase.topo.yml
0 → 100644
浏览文件 @
be3db679
# 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.
# 1 health-check by docker-maven-plugin
# 1 drop table if exists, because we have `ddl-auto: create-drop`
# 1 drop sequence
# 1 create sequence
# 1 create table statement
nodes
:
-
id
:
1
name
:
User
type
:
USER
isReal
:
false
-
id
:
2
name
:
Your_ApplicationName
type
:
Tomcat
isReal
:
true
-
id
:
3
name
:
"
localhost:-1"
type
:
H2
isReal
:
false
calls
:
-
id
:
2_3
source
:
2
detectPoints
:
-
CLIENT
target
:
3
-
id
:
1_2
source
:
1
detectPoints
:
-
SERVER
target
:
2
test/e2e/e2e-mysql/src/test/resources/expected-data/org.apache.skywalking.e2e.SampleVerificationITCase.traces.yml
0 → 100644
浏览文件 @
be3db679
# 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.
# 1 health-check by docker-maven-plugin
# 1 drop table if exists, because we have `ddl-auto: create-drop`
# 1 drop sequence
# 1 create sequence
# 1 create table statement
traces
:
-
key
:
not
null
endpointNames
:
-
/e2e/users
duration
:
ge
0
start
:
gt
0
isError
:
false
traceIds
:
-
not
null
test/e2e/pom.xml
浏览文件 @
be3db679
...
...
@@ -34,6 +34,7 @@
<modules>
<module>
e2e-base
</module>
<module>
e2e-single-service
</module>
<module>
e2e-mysql
</module>
<module>
e2e-cluster
</module>
<module>
e2e-agent-reboot
</module>
<module>
e2e-ttl
</module>
...
...
@@ -55,6 +56,7 @@
<snake.version>
1.23
</snake.version>
<gson.version>
2.8.5
</gson.version>
<h2.version>
1.4.199
</h2.version>
<mysql.version>
8.0.13
</mysql.version>
<elasticsearch.version>
6.3.2
</elasticsearch.version>
<zookeeper.image.version>
3.5
</zookeeper.image.version>
<lombok.version>
1.18.4
</lombok.version>
...
...
test/e2e/run.sh
浏览文件 @
be3db679
...
...
@@ -59,7 +59,7 @@ do
# Some of the tests will modify files in the distribution folder, e.g. cluster test will modify the application.yml
# so we give each test a separate distribution folder here
mkdir
-p
"
$test_case
"
&&
tar
-zxf
dist/apache-skywalking-apm-bin.tar.gz
-C
"
$test_case
"
./mvnw
-Dbuild
.id
=
"
${
BUILD_ID
:-
local
}
"
-De2e
.container.version
=
"
${
E2E_VERSION
}
"
-Dsw
.home
=
"
${
base_dir
}
/
$test_case
/apache-skywalking-apm-bin"
-f
test
/e2e/pom.xml
-pl
"
$test_case
"
-am
verify
status_code
=
$?
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录