blob: ac49c3791ba25f91df9d98b5dc82ed0258b58697 [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.ignite.client.handler;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.net.SocketException;
import java.nio.file.Path;
import org.apache.ignite.client.handler.configuration.ClientConnectorConfiguration;
import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
import org.apache.ignite.internal.network.configuration.NetworkConfiguration;
import org.apache.ignite.internal.testframework.BaseIgniteAbstractTest;
import org.apache.ignite.internal.testframework.IgniteTestUtils;
import org.apache.ignite.internal.testframework.WorkDirectory;
import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;
import org.junit.jupiter.api.extension.ExtendWith;
/**
* Client handler metrics tests. See also {@code org.apache.ignite.client.MetricsTest}.
*/
@ExtendWith(WorkDirectoryExtension.class)
@ExtendWith(ConfigurationExtension.class)
public class ItClientHandlerMetricsTest extends BaseIgniteAbstractTest {
@InjectConfiguration
private NetworkConfiguration networkConfiguration;
@InjectConfiguration
private ClientConnectorConfiguration clientConnectorConfiguration;
private TestServer testServer;
@WorkDirectory
private Path workDir;
@AfterEach
void tearDown() throws Exception {
if (testServer != null) {
testServer.tearDown();
}
}
@Test
void testSessionsRejectedTls(TestInfo testInfo) throws Exception {
testServer = new TestServer(
TestSslConfig.builder()
.keyStorePath(ItClientHandlerTestUtils.generateKeystore(workDir))
.keyStorePassword("changeit")
.build(),
null,
clientConnectorConfiguration,
networkConfiguration
);
var serverModule = testServer.start(testInfo);
assertThrows(SocketException.class, () -> ItClientHandlerTestUtils.connectAndHandshake(serverModule));
assertEquals(1, testServer.metrics().sessionsRejectedTls());
assertEquals(0, testServer.metrics().sessionsRejected());
assertEquals(0, testServer.metrics().sessionsAccepted());
}
@Test
void testSessionsRejected(TestInfo testInfo) throws Exception {
testServer = new TestServer(null, null, clientConnectorConfiguration, networkConfiguration);
var serverModule = testServer.start(testInfo);
// Bad MAGIC.
assertThrows(SocketException.class, () -> ItClientHandlerTestUtils.connectAndHandshake(serverModule, true, false));
assertEquals(1, testServer.metrics().sessionsRejected());
// Bad version.
ItClientHandlerTestUtils.connectAndHandshake(serverModule, false, true);
assertTrue(
IgniteTestUtils.waitForCondition(() -> testServer.metrics().sessionsRejected() == 2, 1000),
() -> "sessionsRejected: " + testServer.metrics().sessionsRejected());
assertEquals(0, testServer.metrics().sessionsRejectedTls());
assertEquals(0, testServer.metrics().sessionsAccepted());
assertEquals(0, testServer.metrics().sessionsActive());
assertEquals(2, testServer.metrics().connectionsInitiated());
}
@Test
void testSessionsRejectedTimeout(TestInfo testInfo) throws Exception {
testServer = new TestServer(null, null, clientConnectorConfiguration, networkConfiguration);
testServer.idleTimeout(300);
var serverModule = testServer.start(testInfo);
try (var ignored = ItClientHandlerTestUtils.connectAndHandshakeAndGetSocket(serverModule)) {
assertTrue(IgniteTestUtils.waitForCondition(() ->
testServer.metrics().sessionsRejectedTimeout() == 1, 5_000));
}
assertEquals(1, testServer.metrics().sessionsAccepted());
assertTrue(IgniteTestUtils.waitForCondition(() ->
testServer.metrics().sessionsActive() == 0, 5_000));
}
@Test
void testSessionsAccepted(TestInfo testInfo) throws Exception {
testServer = new TestServer(null, null, clientConnectorConfiguration, networkConfiguration);
var serverModule = testServer.start(testInfo);
ItClientHandlerTestUtils.connectAndHandshake(serverModule);
assertTrue(IgniteTestUtils.waitForCondition(() -> testServer.metrics().sessionsAccepted() == 1, 1000));
}
@Test
void testSessionsActive(TestInfo testInfo) throws Exception {
testServer = new TestServer(null, null, clientConnectorConfiguration, networkConfiguration);
var serverModule = testServer.start(testInfo);
try (var ignored = ItClientHandlerTestUtils.connectAndHandshakeAndGetSocket(serverModule)) {
assertTrue(IgniteTestUtils.waitForCondition(() -> testServer.metrics().sessionsActive() == 1, 1000));
}
assertTrue(IgniteTestUtils.waitForCondition(() -> testServer.metrics().sessionsActive() == 0, 5_000));
}
@Test
void testBytesSentReceived(TestInfo testInfo) throws Exception {
testServer = new TestServer(null, null, clientConnectorConfiguration, networkConfiguration);
var serverModule = testServer.start(testInfo);
assertEquals(0, testServer.metrics().bytesSent());
assertEquals(0, testServer.metrics().bytesReceived());
ItClientHandlerTestUtils.connectAndHandshake(serverModule);
assertTrue(
IgniteTestUtils.waitForCondition(() -> testServer.metrics().bytesSent() == 89, 1000),
() -> "bytesSent: " + testServer.metrics().bytesSent());
assertTrue(
IgniteTestUtils.waitForCondition(() -> testServer.metrics().bytesReceived() == 15, 1000),
() -> "bytesReceived: " + testServer.metrics().bytesReceived());
ItClientHandlerTestUtils.connectAndHandshake(serverModule, false, true);
assertTrue(
IgniteTestUtils.waitForCondition(() -> testServer.metrics().bytesSent() == 194, 1000),
() -> "bytesSent: " + testServer.metrics().bytesSent());
assertTrue(
IgniteTestUtils.waitForCondition(() -> testServer.metrics().bytesReceived() == 30, 1000),
() -> "bytesReceived: " + testServer.metrics().bytesReceived());
}
}