parent
036aee8d2c
commit
85cc9c36ac
|
|
@ -56,6 +56,8 @@ jobs:
|
|||
run: export E2E_VERSION=jdk12-1.5 && bash -x test/e2e/run.sh e2e-single-service
|
||||
- name: Agent Reboot Tests(JDK8)
|
||||
run: export E2E_VERSION=jdk8-1.5 && bash -x test/e2e/run.sh e2e-agent-reboot
|
||||
- name: Agent Auth Tests(JDK8)
|
||||
run: export E2E_VERSION=jdk8-1.5 && bash -x test/e2e/run.sh e2e-agent-auth
|
||||
|
||||
Cluster:
|
||||
runs-on: ubuntu-latest
|
||||
|
|
|
|||
|
|
@ -83,14 +83,12 @@
|
|||
<alias>${e2e.container.name.prefix}</alias>
|
||||
<run>
|
||||
<env>
|
||||
<SW_AGENT_AUTHENTICATION>test-token</SW_AGENT_AUTHENTICATION>
|
||||
<INSTRUMENTED_SERVICE>${project.build.finalName}.jar</INSTRUMENTED_SERVICE>
|
||||
<INSTRUMENTED_SERVICE_OPTS>-Dskywalking.agent.cool_down_threshold=1
|
||||
</INSTRUMENTED_SERVICE_OPTS>
|
||||
</env>
|
||||
<ports>
|
||||
<port>+webapp.host:webapp.port:8080</port>
|
||||
<port>+client.host:client.port:9090</port>
|
||||
<port>+reboot.host:reboot.port:9091</port>
|
||||
</ports>
|
||||
<volumes>
|
||||
<bind>
|
||||
|
|
@ -100,8 +98,14 @@
|
|||
</bind>
|
||||
</volumes>
|
||||
<wait>
|
||||
<log>SkyWalking e2e container is ready for tests</log>
|
||||
<time>2400000</time>
|
||||
<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>
|
||||
|
|
|
|||
|
|
@ -1,42 +0,0 @@
|
|||
#!/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.
|
||||
|
||||
# in order to make it easier to restart the OAP (by executing the restart script) from outside (container),
|
||||
# we'll expose a tcp port and whenever we receive a message on that port, we'll restart the OAP server,
|
||||
# socat will help on this to execute the script when receiving a message on that port
|
||||
|
||||
apt-get update && apt-get -y install socat
|
||||
|
||||
# socat will execute the command in a new shell, thus won't catch the original functions' declarations
|
||||
# so we'll put the restart command in a script file
|
||||
|
||||
echo '
|
||||
ps -ef | grep -v grep | grep oap.logDir | awk '"'"'{print $2}'"'"' | xargs --no-run-if-empty kill -9
|
||||
rm -rf /tmp/oap/trace_buffer1
|
||||
rm -rf /tmp/oap/mesh_buffer1
|
||||
echo "restarting OAP server..." \
|
||||
&& SW_RECEIVER_BUFFER_PATH=/tmp/oap/trace_buffer1 \
|
||||
&& SW_SERVICE_MESH_BUFFER_PATH=/tmp/oap/mesh_buffer1 \
|
||||
&& cd /sw \
|
||||
&& bash bin/oapService.sh > /dev/null 2>&1 &
|
||||
' > /usr/bin/restart_oap
|
||||
|
||||
sync
|
||||
|
||||
chmod +x /usr/bin/restart_oap
|
||||
|
||||
sync
|
||||
|
|
@ -15,15 +15,7 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# set up the tcp server to listen for the restart command
|
||||
|
||||
socat -u tcp-l:9091,fork system:'bash restart_oap' &
|
||||
|
||||
echo 'starting OAP server...' \
|
||||
&& SW_STORAGE_ES_BULK_ACTIONS=1 \
|
||||
&& SW_STORAGE_ES_FLUSH_INTERVAL=1 \
|
||||
&& SW_RECEIVER_BUFFER_PATH=/tmp/oap/trace_buffer1 \
|
||||
&& SW_SERVICE_MESH_BUFFER_PATH=/tmp/oap/mesh_buffer1 \
|
||||
&& SW_AUTHENTICATION="test-token" \
|
||||
&& start_oap 'init'
|
||||
|
||||
|
|
|
|||
|
|
@ -101,7 +101,8 @@ public class SampleVerificationITCase {
|
|||
try {
|
||||
final Map<String, String> user = new HashMap<>();
|
||||
user.put("name", "SkyWalking");
|
||||
final ResponseEntity<String> responseEntity = restTemplate.postForEntity(instrumentedServiceUrl + "/e2e/users", user, String.class);
|
||||
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)
|
||||
|
|
@ -156,7 +157,8 @@ public class SampleVerificationITCase {
|
|||
.end(now));
|
||||
LOGGER.info("topoData: {}", topoData);
|
||||
|
||||
InputStream expectedInputStream = new ClassPathResource("expected-data/org.apache.skywalking.e2e.SampleVerificationITCase.topo.yml")
|
||||
InputStream expectedInputStream = new ClassPathResource(
|
||||
"expected-data/org.apache.skywalking.e2e.SampleVerificationITCase.topo.yml")
|
||||
.getInputStream();
|
||||
|
||||
final TopoMatcher topoMatcher = new Yaml().loadAs(expectedInputStream, TopoMatcher.class);
|
||||
|
|
@ -167,18 +169,21 @@ public class SampleVerificationITCase {
|
|||
private void verifyServiceInstanceTopo(LocalDateTime minutesAgo) throws Exception {
|
||||
final LocalDateTime now = LocalDateTime.now(ZoneOffset.UTC);
|
||||
|
||||
final ServiceInstanceTopoData topoData = queryClient.serviceInstanceTopo(new ServiceInstanceTopoQuery().stepByMinute()
|
||||
.start(minutesAgo
|
||||
.minusDays(1))
|
||||
.end(now)
|
||||
.clientServiceId("1")
|
||||
.serverServiceId("2"));
|
||||
final ServiceInstanceTopoData topoData = queryClient.serviceInstanceTopo(
|
||||
new ServiceInstanceTopoQuery().stepByMinute()
|
||||
.start(minutesAgo
|
||||
.minusDays(1))
|
||||
.end(now)
|
||||
.clientServiceId("1")
|
||||
.serverServiceId("2"));
|
||||
LOGGER.info("instanceTopoData: {}", topoData);
|
||||
|
||||
InputStream expectedInputStream = new ClassPathResource("expected-data/org.apache.skywalking.e2e.SampleVerificationITCase.serviceInstanceTopo.yml")
|
||||
InputStream expectedInputStream = new ClassPathResource(
|
||||
"expected-data/org.apache.skywalking.e2e.SampleVerificationITCase.serviceInstanceTopo.yml")
|
||||
.getInputStream();
|
||||
|
||||
final ServiceInstanceTopoMatcher topoMatcher = new Yaml().loadAs(expectedInputStream, ServiceInstanceTopoMatcher.class);
|
||||
final ServiceInstanceTopoMatcher topoMatcher = new Yaml().loadAs(
|
||||
expectedInputStream, ServiceInstanceTopoMatcher.class);
|
||||
topoMatcher.verify(topoData);
|
||||
verifyServiceInstanceRelationMetrics(topoData.getCalls(), minutesAgo);
|
||||
}
|
||||
|
|
@ -189,7 +194,8 @@ public class SampleVerificationITCase {
|
|||
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")
|
||||
InputStream expectedInputStream = new ClassPathResource(
|
||||
"expected-data/org.apache.skywalking.e2e.SampleVerificationITCase.services.yml")
|
||||
.getInputStream();
|
||||
|
||||
final ServicesMatcher servicesMatcher = new Yaml().loadAs(expectedInputStream, ServicesMatcher.class);
|
||||
|
|
@ -211,13 +217,14 @@ public class SampleVerificationITCase {
|
|||
}
|
||||
|
||||
private Instances verifyServiceInstances(LocalDateTime minutesAgo, LocalDateTime now,
|
||||
Service service) throws Exception {
|
||||
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")
|
||||
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);
|
||||
|
|
@ -225,10 +232,11 @@ public class SampleVerificationITCase {
|
|||
}
|
||||
|
||||
private Endpoints verifyServiceEndpoints(LocalDateTime minutesAgo, LocalDateTime now,
|
||||
Service service) throws Exception {
|
||||
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")
|
||||
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);
|
||||
|
|
@ -296,7 +304,8 @@ public class SampleVerificationITCase {
|
|||
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")
|
||||
InputStream expectedInputStream = new ClassPathResource(
|
||||
"expected-data/org.apache.skywalking.e2e.SampleVerificationITCase.traces.yml")
|
||||
.getInputStream();
|
||||
|
||||
final TracesMatcher tracesMatcher = new Yaml().loadAs(expectedInputStream, TracesMatcher.class);
|
||||
|
|
@ -304,16 +313,20 @@ public class SampleVerificationITCase {
|
|||
}
|
||||
|
||||
private void verifyServiceInstanceRelationMetrics(List<Call> calls,
|
||||
final LocalDateTime minutesAgo) throws Exception {
|
||||
verifyRelationMetrics(calls, minutesAgo, ALL_SERVICE_INSTANCE_RELATION_CLIENT_METRICS, ALL_SERVICE_INSTANCE_RELATION_SERVER_METRICS);
|
||||
final LocalDateTime minutesAgo) throws Exception {
|
||||
verifyRelationMetrics(
|
||||
calls, minutesAgo, ALL_SERVICE_INSTANCE_RELATION_CLIENT_METRICS,
|
||||
ALL_SERVICE_INSTANCE_RELATION_SERVER_METRICS
|
||||
);
|
||||
}
|
||||
|
||||
private void verifyServiceRelationMetrics(List<Call> calls, final LocalDateTime minutesAgo) throws Exception {
|
||||
verifyRelationMetrics(calls, minutesAgo, ALL_SERVICE_RELATION_CLIENT_METRICS, ALL_SERVICE_RELATION_SERVER_METRICS);
|
||||
verifyRelationMetrics(
|
||||
calls, minutesAgo, ALL_SERVICE_RELATION_CLIENT_METRICS, ALL_SERVICE_RELATION_SERVER_METRICS);
|
||||
}
|
||||
|
||||
private void verifyRelationMetrics(List<Call> calls, final LocalDateTime minutesAgo, String[] relationClientMetrics,
|
||||
String[] relationServerMetrics) throws Exception {
|
||||
String[] relationServerMetrics) throws Exception {
|
||||
for (Call call : calls) {
|
||||
for (String detectPoint : call.getDetectPoints()) {
|
||||
switch (detectPoint) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue