Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce Testkit backend logging level support #1519

Merged
merged 1 commit into from
Dec 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,12 @@
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import java.util.logging.Level;
import neo4j.org.testkit.backend.channel.handler.TestkitMessageInboundHandler;
import neo4j.org.testkit.backend.channel.handler.TestkitMessageOutboundHandler;
import neo4j.org.testkit.backend.channel.handler.TestkitRequestProcessorHandler;
import neo4j.org.testkit.backend.channel.handler.TestkitRequestResponseMapperHandler;
import org.neo4j.driver.Logging;

public class Runner {
public static void main(String[] args) throws InterruptedException {
Expand All @@ -41,6 +43,10 @@ public static void main(String[] args) throws InterruptedException {
} else {
backendMode = TestkitRequestProcessorHandler.BackendMode.SYNC;
}
String levelString = System.getenv("TESTKIT_BACKEND_LOGGING_LEVEL");
Logging logging = levelString == null || levelString.isEmpty()
? Logging.none()
: Logging.console(Level.parse(levelString));

EventLoopGroup group = new NioEventLoopGroup();
try {
Expand All @@ -54,8 +60,8 @@ public static void main(String[] args) throws InterruptedException {
protected void initChannel(SocketChannel channel) {
channel.pipeline().addLast(new TestkitMessageInboundHandler());
channel.pipeline().addLast(new TestkitMessageOutboundHandler());
channel.pipeline().addLast(new TestkitRequestResponseMapperHandler());
channel.pipeline().addLast(new TestkitRequestProcessorHandler(backendMode));
channel.pipeline().addLast(new TestkitRequestResponseMapperHandler(logging));
channel.pipeline().addLast(new TestkitRequestProcessorHandler(backendMode, logging));
}
});
ChannelFuture server = bootstrap.bind().sync();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import neo4j.org.testkit.backend.holder.TransactionHolder;
import neo4j.org.testkit.backend.messages.requests.TestkitCallbackResult;
import neo4j.org.testkit.backend.messages.responses.TestkitResponse;
import org.neo4j.driver.Logging;
import org.neo4j.driver.internal.cluster.RoutingTableRegistry;
import reactor.core.publisher.Mono;

Expand All @@ -60,6 +61,7 @@ public class TestkitState {
private final Map<String, TransactionHolder> transactionIdToTransactionHolder = new HashMap<>();
private final Map<String, AsyncTransactionHolder> transactionIdToAsyncTransactionHolder = new HashMap<>();
private final Map<String, RxTransactionHolder> transactionIdToRxTransactionHolder = new HashMap<>();
private final Logging logging;

@Getter
private final Map<String, Exception> errors = new HashMap<>();
Expand All @@ -72,8 +74,9 @@ public class TestkitState {
@Getter
private final Map<String, CompletableFuture<TestkitCallbackResult>> callbackIdToFuture = new HashMap<>();

public TestkitState(Consumer<TestkitResponse> responseWriter) {
public TestkitState(Consumer<TestkitResponse> responseWriter, Logging logging) {
this.responseWriter = responseWriter;
this.logging = logging;
}

public String newId() {
Expand Down Expand Up @@ -160,6 +163,10 @@ public Mono<RxResultHolder> getRxResultHolder(String id) {
return getRx(id, resultIdToRxResultHolder, RESULT_NOT_FOUND_MESSAGE);
}

public Logging getLogging() {
return logging;
}

private <T> String add(T value, Map<String, T> idToT) {
String id = newId();
idToT.put(id, value);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,19 @@
import neo4j.org.testkit.backend.messages.responses.BackendError;
import neo4j.org.testkit.backend.messages.responses.DriverError;
import neo4j.org.testkit.backend.messages.responses.TestkitResponse;
import org.neo4j.driver.Logging;
import org.neo4j.driver.exceptions.Neo4jException;
import org.neo4j.driver.exceptions.UntrustedServerException;
import org.neo4j.driver.internal.spi.ConnectionPool;

public class TestkitRequestProcessorHandler extends ChannelInboundHandlerAdapter {
private final TestkitState testkitState = new TestkitState(this::writeAndFlush);
private final TestkitState testkitState;
private final BiFunction<TestkitRequest, TestkitState, CompletionStage<TestkitResponse>> processorImpl;
// Some requests require multiple threads
private final Executor requestExecutorService = Executors.newFixedThreadPool(10);
private Channel channel;

public TestkitRequestProcessorHandler(BackendMode backendMode) {
public TestkitRequestProcessorHandler(BackendMode backendMode, Logging logging) {
switch (backendMode) {
case ASYNC:
processorImpl = TestkitRequest::processAsync;
Expand All @@ -56,6 +57,7 @@ public TestkitRequestProcessorHandler(BackendMode backendMode) {
processorImpl = TestkitRequestProcessorHandler::wrapSyncRequest;
break;
}
testkitState = new TestkitState(this::writeAndFlush, logging);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,21 @@
import neo4j.org.testkit.backend.messages.TestkitModule;
import neo4j.org.testkit.backend.messages.requests.TestkitRequest;
import neo4j.org.testkit.backend.messages.responses.TestkitResponse;
import org.neo4j.driver.Logger;
import org.neo4j.driver.Logging;

public class TestkitRequestResponseMapperHandler extends ChannelDuplexHandler {
private final Logger log;
private final ObjectMapper objectMapper = newObjectMapper();

public TestkitRequestResponseMapperHandler(Logging logging) {
log = logging.getLog(getClass());
}

@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
String testkitMessage = (String) msg;
log.debug("Inbound Testkit message '%s'", testkitMessage.trim());
TestkitRequest testkitRequest;
testkitRequest = objectMapper.readValue(testkitMessage, TestkitRequest.class);
ctx.fireChannelRead(testkitRequest);
Expand All @@ -42,6 +50,7 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
TestkitResponse testkitResponse = (TestkitResponse) msg;
String responseStr = objectMapper.writeValueAsString(testkitResponse);
log.debug("Outbound Testkit message '%s'", responseStr.trim());
ctx.writeAndFlush(responseStr, promise);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ public TestkitResponse process(TestkitState testkitState) {
Optional.ofNullable(data.connectionAcquisitionTimeoutMs)
.ifPresent(timeout -> configBuilder.withConnectionAcquisitionTimeout(timeout, TimeUnit.MILLISECONDS));
configBuilder.withDriverMetrics();
configBuilder.withLogging(testkitState.getLogging());
org.neo4j.driver.Driver driver;
Config config = configBuilder.build();
try {
Expand Down