blob: d8cbc40c95b52cef4d08e24bcbd97b6a82b7fa5b [file] [log] [blame]
/*
* 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.servicecomb.foundation.vertx.metrics;
import java.util.IdentityHashMap;
import java.util.Map;
import org.apache.servicecomb.foundation.vertx.metrics.metric.DefaultEndpointMetric;
import org.apache.servicecomb.foundation.vertx.metrics.metric.DefaultTcpSocketMetric;
import org.junit.Before;
import org.junit.Test;
import io.vertx.core.VertxOptions;
import io.vertx.core.http.HttpServerOptions;
import io.vertx.core.net.SocketAddress;
import mockit.Mocked;
import org.junit.jupiter.api.Assertions;
public class TestDefaultHttpServerMetrics {
VertxOptions vertxOptions = new VertxOptions();
MetricsOptionsEx metricsOptionsEx = new MetricsOptionsEx();
DefaultVertxMetrics defaultVertxMetrics;
@Mocked
SocketAddress listen1_addr;
@Mocked
SocketAddress listen2_addr;
@Mocked
HttpServerOptions options;
@Mocked
SocketAddress anyRemoteAddr;
DefaultHttpServerMetrics metrics_listen1_server1;
DefaultHttpServerMetrics metrics_listen1_server2;
DefaultEndpointMetric endpointMetric1;
DefaultHttpServerMetrics metrics_listen2_server1;
DefaultHttpServerMetrics metrics_listen2_server2;
DefaultEndpointMetric endpointMetric2;
String remoteName = "remote";
DefaultTcpSocketMetric socketMetric_listen1_1;
DefaultTcpSocketMetric socketMetric_listen1_2;
DefaultTcpSocketMetric socketMetric_listen2_1;
DefaultTcpSocketMetric socketMetric_listen2_2;
DefaultTcpSocketMetric socketMetric_listen2_3;
@Before
public void setup() {
vertxOptions.setMetricsOptions(metricsOptionsEx);
defaultVertxMetrics = new DefaultVertxMetrics(vertxOptions);
metrics_listen1_server1 = (DefaultHttpServerMetrics) defaultVertxMetrics
.createHttpServerMetrics(options, listen1_addr);
metrics_listen1_server2 = (DefaultHttpServerMetrics) defaultVertxMetrics
.createHttpServerMetrics(options, listen1_addr);
endpointMetric1 = metrics_listen1_server1.getEndpointMetric();
metrics_listen2_server1 = (DefaultHttpServerMetrics) defaultVertxMetrics
.createHttpServerMetrics(options, listen2_addr);
metrics_listen2_server2 = (DefaultHttpServerMetrics) defaultVertxMetrics
.createHttpServerMetrics(options, listen2_addr);
endpointMetric2 = metrics_listen2_server1.getEndpointMetric();
socketMetric_listen1_1 = metrics_listen1_server1.connected(anyRemoteAddr, remoteName);
socketMetric_listen1_2 = metrics_listen1_server2.connected(anyRemoteAddr, remoteName);
socketMetric_listen2_1 = metrics_listen2_server1.connected(anyRemoteAddr, remoteName);
socketMetric_listen2_2 = metrics_listen2_server2.connected(anyRemoteAddr, remoteName);
socketMetric_listen2_3 = metrics_listen2_server2.connected(anyRemoteAddr, remoteName);
}
@Test
public void createMetrics() {
Map<Object, Object> instances = new IdentityHashMap<>();
instances.put(metrics_listen1_server1, null);
instances.put(metrics_listen1_server2, null);
instances.put(metrics_listen2_server1, null);
instances.put(metrics_listen2_server2, null);
Assertions.assertEquals(4, instances.size());
Assertions.assertSame(metrics_listen1_server1.getEndpointMetric(), metrics_listen1_server2.getEndpointMetric());
Assertions.assertNotSame(metrics_listen1_server1.getEndpointMetric(), metrics_listen2_server1.getEndpointMetric());
Assertions.assertSame(metrics_listen2_server1.getEndpointMetric(), metrics_listen2_server2.getEndpointMetric());
}
@Test
public void connectionCount() {
Map<Object, Object> instances = new IdentityHashMap<>();
instances.put(socketMetric_listen1_1, null);
instances.put(socketMetric_listen1_2, null);
instances.put(socketMetric_listen2_1, null);
instances.put(socketMetric_listen2_2, null);
instances.put(socketMetric_listen2_3, null);
Assertions.assertEquals(5, instances.size());
Assertions.assertTrue(socketMetric_listen1_1.isConnected());
Assertions.assertTrue(socketMetric_listen1_2.isConnected());
Assertions.assertTrue(socketMetric_listen2_1.isConnected());
Assertions.assertTrue(socketMetric_listen2_2.isConnected());
Assertions.assertTrue(socketMetric_listen2_3.isConnected());
Assertions.assertEquals(2, endpointMetric1.getCurrentConnectionCount());
Assertions.assertEquals(3, endpointMetric2.getCurrentConnectionCount());
// disconnect
metrics_listen1_server1.disconnected(socketMetric_listen1_1, anyRemoteAddr);
metrics_listen1_server2.disconnected(socketMetric_listen1_2, anyRemoteAddr);
metrics_listen2_server1.disconnected(socketMetric_listen2_1, anyRemoteAddr);
metrics_listen2_server2.disconnected(socketMetric_listen2_2, anyRemoteAddr);
metrics_listen2_server2.disconnected(socketMetric_listen2_3, anyRemoteAddr);
Assertions.assertFalse(socketMetric_listen1_1.isConnected());
Assertions.assertFalse(socketMetric_listen1_2.isConnected());
Assertions.assertFalse(socketMetric_listen2_1.isConnected());
Assertions.assertFalse(socketMetric_listen2_2.isConnected());
Assertions.assertFalse(socketMetric_listen2_3.isConnected());
Assertions.assertEquals(0, endpointMetric1.getCurrentConnectionCount());
Assertions.assertEquals(0, endpointMetric2.getCurrentConnectionCount());
}
@Test
public void bytesRead() {
metrics_listen1_server1.bytesRead(socketMetric_listen1_1, anyRemoteAddr, 1);
metrics_listen1_server2.bytesRead(socketMetric_listen1_2, anyRemoteAddr, 2);
metrics_listen2_server1.bytesRead(socketMetric_listen2_1, anyRemoteAddr, 3);
metrics_listen2_server2.bytesRead(socketMetric_listen2_2, anyRemoteAddr, 4);
metrics_listen2_server2.bytesRead(socketMetric_listen2_3, anyRemoteAddr, 5);
Assertions.assertEquals(3, endpointMetric1.getBytesRead());
Assertions.assertEquals(12, endpointMetric2.getBytesRead());
}
@Test
public void bytesWritten() {
metrics_listen1_server1.bytesWritten(socketMetric_listen1_1, anyRemoteAddr, 1);
metrics_listen1_server2.bytesWritten(socketMetric_listen1_2, anyRemoteAddr, 2);
metrics_listen2_server1.bytesWritten(socketMetric_listen2_1, anyRemoteAddr, 3);
metrics_listen2_server2.bytesWritten(socketMetric_listen2_2, anyRemoteAddr, 4);
metrics_listen2_server2.bytesWritten(socketMetric_listen2_3, anyRemoteAddr, 5);
Assertions.assertEquals(3, endpointMetric1.getBytesWritten());
Assertions.assertEquals(12, endpointMetric2.getBytesWritten());
}
}