blob: 4276d9100fb94c42b9b9b6c0a9f3d159ac96fdab [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;
import static org.apache.ignite.internal.util.IgniteUtils.closeAll;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.empty;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.startsWith;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.util.ArrayList;
import org.apache.ignite.client.fakes.FakeIgnite;
import org.apache.ignite.client.fakes.FakeIgniteTables;
import org.apache.ignite.internal.testframework.BaseIgniteAbstractTest;
import org.apache.ignite.lang.LoggerFactory;
import org.jetbrains.annotations.Nullable;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
/**
* Tests verifies an ability to set custom logger to the client.
*/
public class ClientLoggingTest extends BaseIgniteAbstractTest {
/** Test server. */
private TestServer server;
/** Test server 2. */
private TestServer server2;
@AfterEach
void tearDown() throws Exception {
closeAll(server, server2);
}
@Test
public void loggersSetToDifferentClientsNotInterfereWithEachOther() throws Exception {
FakeIgnite ignite1 = new FakeIgnite();
((FakeIgniteTables) ignite1.tables()).createTable("t");
server = startServer(ignite1, 10901);
var loggerFactory1 = new TestLoggerFactory("client1");
var loggerFactory2 = new TestLoggerFactory("client2");
var client1 = createClient(loggerFactory1, 10901, 10902);
var client2 = createClient(loggerFactory2, 10901, 10902);
assertEquals("t", client1.tables().tables().get(0).name());
assertEquals("t", client2.tables().tables().get(0).name());
server.close();
FakeIgnite ignite2 = new FakeIgnite();
((FakeIgniteTables) ignite2.tables()).createTable("t2");
server2 = startServer(ignite2, 10902);
assertEquals("t2", client1.tables().tables().get(0).name());
assertEquals("t2", client2.tables().tables().get(0).name());
assertThat(loggerFactory1.logger.entries(), not(empty()));
assertThat(loggerFactory2.logger.entries(), not(empty()));
loggerFactory1.logger.entries().forEach(msg -> assertThat(msg, startsWith("client1:")));
loggerFactory2.logger.entries().forEach(msg -> assertThat(msg, startsWith("client2:")));
}
@Test
public void testBasicLogging() throws Exception {
FakeIgnite ignite = new FakeIgnite();
((FakeIgniteTables) ignite.tables()).createTable("t");
server = startServer(ignite, null);
server2 = startServer(ignite, null);
var loggerFactory = new TestLoggerFactory("c");
try (var client = IgniteClient.builder()
.addresses("127.0.0.1:" + server.port(), "127.0.0.1:" + server2.port(), "127.0.0.1:43210")
.loggerFactory(loggerFactory)
.build()) {
client.tables().tables();
client.tables().table("t");
loggerFactory.waitForLogContains("Connection established", 5000);
loggerFactory.waitForLogContains("c:Sending request [opCode=3, remoteAddress=127.0.0.1", 5000);
loggerFactory.waitForLogMatches(".*c:Failed to establish connection to 127\\.0\\.0\\.1(/<unresolved>)?:43210.*", 5000);
}
}
private static TestServer startServer(FakeIgnite ignite, @Nullable Integer port) {
return new TestServer(0, ignite, null, null, null, AbstractClientTest.clusterId, null, port);
}
private static IgniteClient createClient(LoggerFactory loggerFactory, int... ports) {
var addrs = new ArrayList<String>();
for (int port : ports) {
addrs.add("127.0.0.1:" + port);
}
return IgniteClient.builder()
.addresses(addrs.toArray(new String[0]))
.loggerFactory(loggerFactory)
.build();
}
}