From 030412508033b0b36ac3f9c4b65ca2c7d6d90772 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Wed, 9 Jul 2025 16:34:28 -0400 Subject: [PATCH 1/8] Follow symlinks to find self --- geequel-shell/src/dist/geequel-shell | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geequel-shell/src/dist/geequel-shell b/geequel-shell/src/dist/geequel-shell index ef07aed..9fae3ca 100755 --- a/geequel-shell/src/dist/geequel-shell +++ b/geequel-shell/src/dist/geequel-shell @@ -84,7 +84,7 @@ _show_java_help() { } build_classpath() { - APP_HOME="$(cd "$(dirname "$0")" && pwd)" + APP_HOME="$(cd "$(dirname "$(realpath "$0")")" && pwd)" # First try in sub directory JARPATH="$(find "${APP_HOME}" -name "geequel-shell.jar" )" From f269566c5899c5b64dfcfa1f14419859bd51ecd9 Mon Sep 17 00:00:00 2001 From: Spencer Perkins <95900100+SpecialThing44@users.noreply.github.com> Date: Tue, 19 Aug 2025 09:58:33 -0400 Subject: [PATCH 2/8] Update to use java driver 4.2.8 --- build.gradle | 2 +- .../CypherShellFailureIntegrationTest.java | 2 +- .../commands/CypherShellIntegrationTest.java | 2 +- .../org/neo4j/shell/ConnectionConfig.java | 9 +-- .../src/main/java/org/neo4j/shell/Main.java | 10 ++- .../org/neo4j/shell/cli/CliArgHelper.java | 6 +- .../java/org/neo4j/shell/log/AnsiLogger.java | 2 +- .../java/org/neo4j/shell/log/NullLogger.java | 7 +- .../java/org/neo4j/shell/log/NullLogging.java | 4 +- .../shell/prettyprint/OutputFormatter.java | 20 +++--- .../prettyprint/SimpleOutputFormatter.java | 6 +- .../prettyprint/StatisticsCollector.java | 4 +- .../prettyprint/TableOutputFormatter.java | 6 +- .../shell/prettyprint/TablePlanFormatter.java | 6 +- .../org/neo4j/shell/state/BoltResult.java | 4 +- .../neo4j/shell/state/BoltStateHandler.java | 65 +++++++++++-------- .../org/neo4j/shell/state/ListBoltResult.java | 4 +- .../shell/state/StatementBoltResult.java | 14 ++-- .../org/neo4j/shell/ConnectionConfigTest.java | 10 +-- .../java/org/neo4j/shell/CypherShellTest.java | 10 +-- .../test/java/org/neo4j/shell/MainTest.java | 4 +- .../shell/cli/InteractiveShellRunnerTest.java | 2 +- .../cli/NonInteractiveShellRunnerTest.java | 2 +- .../shell/cli/StringShellRunnerTest.java | 2 +- .../org/neo4j/shell/log/AnsiLoggerTest.java | 2 +- .../prettyprint/OutputFormatterTest.java | 12 ++-- .../shell/prettyprint/PrettyPrinterTest.java | 22 +++---- .../prettyprint/StatisticsCollectorTest.java | 4 +- .../prettyprint/TableOutputFormatterTest.java | 46 ++++++------- .../shell/state/BoltStateHandlerTest.java | 46 ++++++------- .../org/neo4j/shell/test/bolt/FakeDriver.java | 8 +-- .../org/neo4j/shell/test/bolt/FakeRecord.java | 16 ++--- .../shell/test/bolt/FakeResultSummary.java | 4 +- .../neo4j/shell/test/bolt/FakeSession.java | 54 +++++++-------- .../shell/test/bolt/FakeStatementResult.java | 24 +++---- .../shell/test/bolt/FakeTransaction.java | 24 +++---- .../org/neo4j/shell/test/bolt/FakeValue.java | 20 +++--- 37 files changed, 248 insertions(+), 237 deletions(-) diff --git a/build.gradle b/build.gradle index 1b1e08f..c0e23b3 100644 --- a/build.gradle +++ b/build.gradle @@ -71,7 +71,7 @@ ext { argparse4jVersion = '0.7.0' junitVersion = '4.12' evaluatorVersion = '3.5.14' - neo4jJavaDriverVersion = '1.7.6' + neo4jJavaDriverVersion = '4.4.20' findbugsVersion = '3.0.0' jansiVersion = '1.13' jlineVersion = '2.14.6' diff --git a/geequel-shell/src/integration-test/java/org/neo4j/shell/commands/CypherShellFailureIntegrationTest.java b/geequel-shell/src/integration-test/java/org/neo4j/shell/commands/CypherShellFailureIntegrationTest.java index 496bfdc..c0d8bb5 100644 --- a/geequel-shell/src/integration-test/java/org/neo4j/shell/commands/CypherShellFailureIntegrationTest.java +++ b/geequel-shell/src/integration-test/java/org/neo4j/shell/commands/CypherShellFailureIntegrationTest.java @@ -24,7 +24,7 @@ import org.junit.Test; import org.junit.rules.ExpectedException; -import org.neo4j.driver.v1.exceptions.AuthenticationException; +import org.neo4j.driver.exceptions.AuthenticationException; import org.neo4j.shell.CypherShell; import org.neo4j.shell.StringLinePrinter; import org.neo4j.shell.cli.Format; diff --git a/geequel-shell/src/integration-test/java/org/neo4j/shell/commands/CypherShellIntegrationTest.java b/geequel-shell/src/integration-test/java/org/neo4j/shell/commands/CypherShellIntegrationTest.java index 09b4c21..a40fb1c 100644 --- a/geequel-shell/src/integration-test/java/org/neo4j/shell/commands/CypherShellIntegrationTest.java +++ b/geequel-shell/src/integration-test/java/org/neo4j/shell/commands/CypherShellIntegrationTest.java @@ -19,7 +19,7 @@ */ package org.neo4j.shell.commands; -import org.neo4j.driver.v1.exceptions.ServiceUnavailableException; +import org.neo4j.driver.exceptions.ServiceUnavailableException; import org.neo4j.shell.ConnectionConfig; import org.neo4j.shell.CypherShell; import org.neo4j.shell.exception.CommandException; diff --git a/geequel-shell/src/main/java/org/neo4j/shell/ConnectionConfig.java b/geequel-shell/src/main/java/org/neo4j/shell/ConnectionConfig.java index 7ce1ddb..974875c 100644 --- a/geequel-shell/src/main/java/org/neo4j/shell/ConnectionConfig.java +++ b/geequel-shell/src/main/java/org/neo4j/shell/ConnectionConfig.java @@ -19,7 +19,7 @@ */ package org.neo4j.shell; -import org.neo4j.driver.v1.Config; +import org.neo4j.driver.Config; import javax.annotation.Nonnull; @@ -27,7 +27,6 @@ public class ConnectionConfig { private final String scheme; private final String host; private final int port; - private final Config.EncryptionLevel encryption; private String username; private String password; @@ -37,7 +36,6 @@ public ConnectionConfig(@Nonnull String scheme, @Nonnull String host, int port, this.port = port; this.username = fallbackToEnvVariable(username, "ONGDB_USERNAME"); this.password = fallbackToEnvVariable(password, "ONGDB_PASSWORD"); - this.encryption = encryption ? Config.EncryptionLevel.REQUIRED : Config.EncryptionLevel.NONE; this.scheme = scheme; } @@ -82,11 +80,6 @@ public String driverUrl() { return String.format("%s%s:%d", scheme(), host(), port()); } - @Nonnull - public Config.EncryptionLevel encryption() { - return encryption; - } - public void setUsername(@Nonnull String username) { this.username = username; } diff --git a/geequel-shell/src/main/java/org/neo4j/shell/Main.java b/geequel-shell/src/main/java/org/neo4j/shell/Main.java index 9fbb9b5..61bec80 100644 --- a/geequel-shell/src/main/java/org/neo4j/shell/Main.java +++ b/geequel-shell/src/main/java/org/neo4j/shell/Main.java @@ -21,7 +21,7 @@ import jline.console.ConsoleReader; -import org.neo4j.driver.v1.exceptions.AuthenticationException; +import org.neo4j.driver.exceptions.AuthenticationException; import org.neo4j.shell.config.Build; import org.neo4j.shell.cli.CliArgHelper; import org.neo4j.shell.cli.CliArgs; @@ -49,6 +49,8 @@ public class Main { public static void main(String[] args) { CliArgs cliArgs = CliArgHelper.parse(args); + System.out.println("Geequel-Shell parsed args " + Build.version()); + // if null, then command line parsing went wrong // CliArgs has already printed errors. if (cliArgs == null) { @@ -103,10 +105,14 @@ void startShell(@Nonnull CliArgs cliArgs) { cliArgs.getPassword(), cliArgs.getEncryption()); + System.out.println("Geequel-Shell connecting to " + connectionConfig.toString()); + try { CypherShell shell = new CypherShell(logger, prettyConfig); + System.out.println("Geequel-Shell created shell"); // Can only prompt for password if input has not been redirected connectMaybeInteractively(shell, connectionConfig, isInputInteractive(cliArgs), isOutputInteractive()); + System.out.println("Geequel-Shell connected to " + shell.getServerVersion()); // Construct shell runner after connecting, due to interrupt handling ShellRunner shellRunner = ShellRunner.getShellRunner(cliArgs, shell, logger, connectionConfig); @@ -142,11 +148,13 @@ void connectMaybeInteractively(@Nonnull CypherShell shell, try { // Try to connect + System.out.println("Geequel-Shell about to connect "); shell.connect(connectionConfig); } catch (AuthenticationException e) { // Fail if we already prompted, // or do not have interactive input, // or already tried with both username and password + System.out.println("Geequel-Shell failed to connect " + e.getMessage()); if (didPrompt || !inputInteractive || (!connectionConfig.username().isEmpty() && !connectionConfig.password().isEmpty())) { throw e; } diff --git a/geequel-shell/src/main/java/org/neo4j/shell/cli/CliArgHelper.java b/geequel-shell/src/main/java/org/neo4j/shell/cli/CliArgHelper.java index 183936a..238b6cd 100644 --- a/geequel-shell/src/main/java/org/neo4j/shell/cli/CliArgHelper.java +++ b/geequel-shell/src/main/java/org/neo4j/shell/cli/CliArgHelper.java @@ -52,14 +52,18 @@ public class CliArgHelper { public static CliArgs parse(@Nonnull String... args) { final ArgumentParser parser = setupParser(); final Namespace ns; + System.out.println("geequel-shell: " + format("Starting with arguments: %s", String.join(" ", args))); try { ns = parser.parseArgs(args); } catch (ArgumentParserException e) { + System.err.println("geequel-shell: parse error: " + e.getMessage()); parser.handleError(e); return null; } + System.out.println("geequel-shell: " + format("Parsed arguments: %s", ns.toString())); + // Parse address string, returns null on error final Matcher addressMatcher = parseAddressMatcher(parser, ns.getString("address")); @@ -145,7 +149,7 @@ private static ArgumentParser setupParser() ArgumentGroup connGroup = parser.addArgumentGroup("connection arguments"); connGroup.addArgument("-a", "--address") .help("address and port to connect to") - .setDefault("bolt://localhost:7687"); + .setDefault("neo4j://localhost:7687"); connGroup.addArgument("-u", "--username") .setDefault("") .help("username to connect as. Can also be specified using environment variable ONGDB_USERNAME"); diff --git a/geequel-shell/src/main/java/org/neo4j/shell/log/AnsiLogger.java b/geequel-shell/src/main/java/org/neo4j/shell/log/AnsiLogger.java index 9d34970..8a2ab7a 100644 --- a/geequel-shell/src/main/java/org/neo4j/shell/log/AnsiLogger.java +++ b/geequel-shell/src/main/java/org/neo4j/shell/log/AnsiLogger.java @@ -21,7 +21,7 @@ import org.fusesource.jansi.Ansi; import org.fusesource.jansi.AnsiConsole; -import org.neo4j.driver.v1.exceptions.ClientException; +import org.neo4j.driver.exceptions.ClientException; import org.neo4j.shell.cli.Format; import org.neo4j.shell.exception.AnsiFormattedException; diff --git a/geequel-shell/src/main/java/org/neo4j/shell/log/NullLogger.java b/geequel-shell/src/main/java/org/neo4j/shell/log/NullLogger.java index 04367f6..1a0b8e4 100644 --- a/geequel-shell/src/main/java/org/neo4j/shell/log/NullLogger.java +++ b/geequel-shell/src/main/java/org/neo4j/shell/log/NullLogger.java @@ -19,7 +19,7 @@ */ package org.neo4j.shell.log; -import org.neo4j.driver.v1.Logger; +import org.neo4j.driver.Logger; public class NullLogger implements Logger { @@ -54,6 +54,11 @@ public void debug( String message, Object... params ) { } + @Override + public void debug(String s, Throwable throwable) { + + } + @Override public void trace( String message, Object... params ) { diff --git a/geequel-shell/src/main/java/org/neo4j/shell/log/NullLogging.java b/geequel-shell/src/main/java/org/neo4j/shell/log/NullLogging.java index 617bd86..14dcbfa 100644 --- a/geequel-shell/src/main/java/org/neo4j/shell/log/NullLogging.java +++ b/geequel-shell/src/main/java/org/neo4j/shell/log/NullLogging.java @@ -19,8 +19,8 @@ */ package org.neo4j.shell.log; -import org.neo4j.driver.v1.Logger; -import org.neo4j.driver.v1.Logging; +import org.neo4j.driver.Logger; +import org.neo4j.driver.Logging; public class NullLogging implements Logging { diff --git a/geequel-shell/src/main/java/org/neo4j/shell/prettyprint/OutputFormatter.java b/geequel-shell/src/main/java/org/neo4j/shell/prettyprint/OutputFormatter.java index ce4208a..2b803a2 100644 --- a/geequel-shell/src/main/java/org/neo4j/shell/prettyprint/OutputFormatter.java +++ b/geequel-shell/src/main/java/org/neo4j/shell/prettyprint/OutputFormatter.java @@ -20,15 +20,15 @@ package org.neo4j.shell.prettyprint; import org.neo4j.driver.internal.types.TypeRepresentation; -import org.neo4j.driver.v1.Value; -import org.neo4j.driver.v1.Values; -import org.neo4j.driver.v1.summary.Plan; -import org.neo4j.driver.v1.summary.ProfiledPlan; -import org.neo4j.driver.v1.summary.ResultSummary; -import org.neo4j.driver.v1.types.Node; -import org.neo4j.driver.v1.types.Path; -import org.neo4j.driver.v1.types.Point; -import org.neo4j.driver.v1.types.Relationship; +import org.neo4j.driver.Value; +import org.neo4j.driver.Values; +import org.neo4j.driver.summary.Plan; +import org.neo4j.driver.summary.ProfiledPlan; +import org.neo4j.driver.summary.ResultSummary; +import org.neo4j.driver.types.Node; +import org.neo4j.driver.types.Path; +import org.neo4j.driver.types.Point; +import org.neo4j.driver.types.Relationship; import org.neo4j.shell.state.BoltResult; import javax.annotation.Nonnull; @@ -216,7 +216,7 @@ static Map info(@Nonnull ResultSummary summary) { Plan plan = summary.plan(); result.put("Plan", Values.value(summary.hasProfile() ? "PROFILE" : "EXPLAIN")); - result.put("Statement", Values.value(summary.statementType().name())); + result.put("Statement", Values.value(summary.queryType().name())); Map arguments = plan.arguments(); Value defaultValue = Values.value(""); diff --git a/geequel-shell/src/main/java/org/neo4j/shell/prettyprint/SimpleOutputFormatter.java b/geequel-shell/src/main/java/org/neo4j/shell/prettyprint/SimpleOutputFormatter.java index f2271dd..e84712f 100644 --- a/geequel-shell/src/main/java/org/neo4j/shell/prettyprint/SimpleOutputFormatter.java +++ b/geequel-shell/src/main/java/org/neo4j/shell/prettyprint/SimpleOutputFormatter.java @@ -19,9 +19,9 @@ */ package org.neo4j.shell.prettyprint; -import org.neo4j.driver.v1.Record; -import org.neo4j.driver.v1.Value; -import org.neo4j.driver.v1.summary.ResultSummary; +import org.neo4j.driver.Record; +import org.neo4j.driver.Value; +import org.neo4j.driver.summary.ResultSummary; import org.neo4j.shell.state.BoltResult; import javax.annotation.Nonnull; diff --git a/geequel-shell/src/main/java/org/neo4j/shell/prettyprint/StatisticsCollector.java b/geequel-shell/src/main/java/org/neo4j/shell/prettyprint/StatisticsCollector.java index 223b0be..3421966 100644 --- a/geequel-shell/src/main/java/org/neo4j/shell/prettyprint/StatisticsCollector.java +++ b/geequel-shell/src/main/java/org/neo4j/shell/prettyprint/StatisticsCollector.java @@ -19,8 +19,8 @@ */ package org.neo4j.shell.prettyprint; -import org.neo4j.driver.v1.summary.ResultSummary; -import org.neo4j.driver.v1.summary.SummaryCounters; +import org.neo4j.driver.summary.ResultSummary; +import org.neo4j.driver.summary.SummaryCounters; import org.neo4j.shell.cli.Format; import javax.annotation.Nonnull; diff --git a/geequel-shell/src/main/java/org/neo4j/shell/prettyprint/TableOutputFormatter.java b/geequel-shell/src/main/java/org/neo4j/shell/prettyprint/TableOutputFormatter.java index a7ecc9b..07c10b9 100644 --- a/geequel-shell/src/main/java/org/neo4j/shell/prettyprint/TableOutputFormatter.java +++ b/geequel-shell/src/main/java/org/neo4j/shell/prettyprint/TableOutputFormatter.java @@ -31,9 +31,9 @@ import org.neo4j.driver.internal.InternalRecord; import org.neo4j.driver.internal.value.NumberValueAdapter; -import org.neo4j.driver.v1.Record; -import org.neo4j.driver.v1.Value; -import org.neo4j.driver.v1.summary.ResultSummary; +import org.neo4j.driver.Record; +import org.neo4j.driver.Value; +import org.neo4j.driver.summary.ResultSummary; import org.neo4j.shell.state.BoltResult; import static java.util.Arrays.asList; diff --git a/geequel-shell/src/main/java/org/neo4j/shell/prettyprint/TablePlanFormatter.java b/geequel-shell/src/main/java/org/neo4j/shell/prettyprint/TablePlanFormatter.java index 788356f..8c7aaba 100644 --- a/geequel-shell/src/main/java/org/neo4j/shell/prettyprint/TablePlanFormatter.java +++ b/geequel-shell/src/main/java/org/neo4j/shell/prettyprint/TablePlanFormatter.java @@ -35,9 +35,9 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -import org.neo4j.driver.v1.Value; -import org.neo4j.driver.v1.Values; -import org.neo4j.driver.v1.summary.Plan; +import org.neo4j.driver.Value; +import org.neo4j.driver.Values; +import org.neo4j.driver.summary.Plan; import static java.util.Arrays.asList; import static java.util.stream.Collectors.joining; diff --git a/geequel-shell/src/main/java/org/neo4j/shell/state/BoltResult.java b/geequel-shell/src/main/java/org/neo4j/shell/state/BoltResult.java index d2c6653..27dd4e0 100644 --- a/geequel-shell/src/main/java/org/neo4j/shell/state/BoltResult.java +++ b/geequel-shell/src/main/java/org/neo4j/shell/state/BoltResult.java @@ -19,8 +19,8 @@ */ package org.neo4j.shell.state; -import org.neo4j.driver.v1.Record; -import org.neo4j.driver.v1.summary.ResultSummary; +import org.neo4j.driver.Record; +import org.neo4j.driver.summary.ResultSummary; import javax.annotation.Nonnull; import java.util.Iterator; diff --git a/geequel-shell/src/main/java/org/neo4j/shell/state/BoltStateHandler.java b/geequel-shell/src/main/java/org/neo4j/shell/state/BoltStateHandler.java index 84a63f1..0776b93 100644 --- a/geequel-shell/src/main/java/org/neo4j/shell/state/BoltStateHandler.java +++ b/geequel-shell/src/main/java/org/neo4j/shell/state/BoltStateHandler.java @@ -19,21 +19,14 @@ */ package org.neo4j.shell.state; -import org.neo4j.driver.v1.AccessMode; -import org.neo4j.driver.v1.AuthToken; -import org.neo4j.driver.v1.AuthTokens; -import org.neo4j.driver.v1.Config; -import org.neo4j.driver.v1.Driver; -import org.neo4j.driver.v1.GraphDatabase; -import org.neo4j.driver.v1.Session; -import org.neo4j.driver.v1.Statement; -import org.neo4j.driver.v1.StatementResult; -import org.neo4j.driver.v1.Transaction; -import org.neo4j.driver.v1.exceptions.SessionExpiredException; +import org.neo4j.driver.*; +import org.neo4j.driver.Result; +import org.neo4j.driver.exceptions.SessionExpiredException; import org.neo4j.shell.ConnectionConfig; import org.neo4j.shell.Connector; import org.neo4j.shell.TransactionHandler; import org.neo4j.shell.TriFunction; +import org.neo4j.shell.config.Build; import org.neo4j.shell.exception.CommandException; import org.neo4j.shell.log.NullLogging; @@ -49,6 +42,7 @@ * Handles interactions with the driver */ public class BoltStateHandler implements TransactionHandler, Connector { + private static final String USER_AGENT = "ongdb-geequel-shell/v" + Build.version(); private final TriFunction driverProvider; protected Driver driver; protected Session session; @@ -60,7 +54,9 @@ public BoltStateHandler() { } BoltStateHandler(TriFunction driverProvider) { + System.out.println("Creating BoltStateHandler"); this.driverProvider = driverProvider; + System.out.println("Created BoltStateHandler"); } @Override @@ -82,7 +78,7 @@ public Optional> commitTransaction() throws CommandException { if (!isTransactionOpen()) { throw new CommandException("There is no open transaction to commit"); } - tx.success(); + tx.commit(); tx.close(); tx = null; @@ -97,7 +93,7 @@ public void rollbackTransaction() throws CommandException { if (!isTransactionOpen()) { throw new CommandException("There is no open transaction to rollback"); } - tx.failure(); + tx.rollback(); tx.close(); tx = null; } @@ -121,12 +117,17 @@ public void connect(@Nonnull ConnectionConfig connectionConfig) throws CommandEx final AuthToken authToken = AuthTokens.basic(connectionConfig.username(), connectionConfig.password()); try { + System.out.println("About to get driver"); driver = getDriver(connectionConfig, authToken); + System.out.println("Got driver"); reconnect(); + System.out.println("Reconnected"); } catch (Throwable t) { try { + System.err.println("Error connecting to ONgDB: " + t.getMessage()); silentDisconnect(); } catch (Exception e) { + System.err.println("Error disconnecting from ONgDB: " + e.getMessage()); t.addSuppressed(e); } throw t; @@ -134,14 +135,19 @@ public void connect(@Nonnull ConnectionConfig connectionConfig) throws CommandEx } private void reconnect() { - String bookmark = null; + Bookmark bookmark = null; if (session != null) { bookmark = session.lastBookmark(); session.close(); } - session = driver.session(AccessMode.WRITE, bookmark); - StatementResult run = session.run("RETURN 1"); - this.version = run.summary().server().version(); + System.out.println("Reconnecting with bookmark: " + bookmark); + SessionConfig sessionConfig = SessionConfig.builder().withDefaultAccessMode(AccessMode.WRITE).withBookmarks( bookmark).build(); + session = driver.session(sessionConfig); + System.out.println("Reconnected with bookmark: " + session); + Result run = session.run("RETURN 1"); + System.out.println("About to consume result"); + this.version = run.consume().server().version(); + System.out.println("Consumed result, version: " + version); run.consume(); } @@ -194,19 +200,19 @@ public Optional runCypher(@Nonnull String cypher, */ @Nonnull private Optional getBoltResult(@Nonnull String cypher, @Nonnull Map queryParams) throws SessionExpiredException { - StatementResult statementResult; + Result Result; if (isTransactionOpen()){ - statementResult = tx.run(new Statement(cypher, queryParams)); + Result = tx.run(new Query(cypher, queryParams)); } else { - statementResult = session.run(new Statement(cypher, queryParams)); + Result = session.run(new Query(cypher, queryParams)); } - if (statementResult == null) { + if (Result == null) { return Optional.empty(); } - return Optional.of(new StatementBoltResult(statementResult)); + return Optional.of(new StatementBoltResult(Result)); } /** @@ -237,7 +243,7 @@ public void reset() { // Clear current state if (isTransactionOpen()) { // Bolt has already rolled back the transaction but it doesn't close it properly - tx.failure(); + tx.rollback(); tx.close(); tx = null; } @@ -245,13 +251,16 @@ public void reset() { } private Driver getDriver(@Nonnull ConnectionConfig connectionConfig, @Nullable AuthToken authToken) { - Config config = Config.build() - .withLogging(NullLogging.NULL_LOGGING) - .withEncryptionLevel(connectionConfig.encryption()).toConfig(); - return driverProvider.apply(connectionConfig.driverUrl(), authToken, config); + Config config = Config.builder() + .withLogging(NullLogging.NULL_LOGGING).withUserAgent( USER_AGENT ).build(); + + System.out.println("About to get driver with authToken: " + authToken); + String driverUrl = connectionConfig.driverUrl(); + System.out.println("About to get driver with url: " + driverUrl); + return driverProvider.apply(driverUrl, authToken, config); } - private List executeWithRetry(List transactionStatements, BiFunction biFunction) { + private List executeWithRetry(List transactionStatements, BiFunction biFunction) { return session.writeTransaction(tx -> transactionStatements.stream() .map(transactionStatement -> biFunction.apply(transactionStatement, tx)) diff --git a/geequel-shell/src/main/java/org/neo4j/shell/state/ListBoltResult.java b/geequel-shell/src/main/java/org/neo4j/shell/state/ListBoltResult.java index 2eb32dc..643cf41 100644 --- a/geequel-shell/src/main/java/org/neo4j/shell/state/ListBoltResult.java +++ b/geequel-shell/src/main/java/org/neo4j/shell/state/ListBoltResult.java @@ -19,8 +19,8 @@ */ package org.neo4j.shell.state; -import org.neo4j.driver.v1.Record; -import org.neo4j.driver.v1.summary.ResultSummary; +import org.neo4j.driver.Record; +import org.neo4j.driver.summary.ResultSummary; import javax.annotation.Nonnull; import java.util.Collections; diff --git a/geequel-shell/src/main/java/org/neo4j/shell/state/StatementBoltResult.java b/geequel-shell/src/main/java/org/neo4j/shell/state/StatementBoltResult.java index 752bbe7..67f949a 100644 --- a/geequel-shell/src/main/java/org/neo4j/shell/state/StatementBoltResult.java +++ b/geequel-shell/src/main/java/org/neo4j/shell/state/StatementBoltResult.java @@ -19,22 +19,22 @@ */ package org.neo4j.shell.state; -import org.neo4j.driver.v1.Record; -import org.neo4j.driver.v1.StatementResult; -import org.neo4j.driver.v1.summary.ResultSummary; +import org.neo4j.driver.Record; +import org.neo4j.driver.Result; +import org.neo4j.driver.summary.ResultSummary; import javax.annotation.Nonnull; import java.util.Iterator; import java.util.List; /** - * Wrapper around {@link StatementResult}. Might or might not be materialized. + * Wrapper around {@link Result}. Might or might not be materialized. */ public class StatementBoltResult implements BoltResult { - private final StatementResult result; + private final Result result; - public StatementBoltResult(StatementResult result) { + public StatementBoltResult(Result result) { this.result = result; } @@ -59,6 +59,6 @@ public Iterator iterate() { @Nonnull @Override public ResultSummary getSummary() { - return result.summary(); + return result.consume(); } } diff --git a/geequel-shell/src/test/java/org/neo4j/shell/ConnectionConfigTest.java b/geequel-shell/src/test/java/org/neo4j/shell/ConnectionConfigTest.java index ff1d3fa..3a26a10 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/ConnectionConfigTest.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/ConnectionConfigTest.java @@ -20,7 +20,7 @@ package org.neo4j.shell; import org.junit.Test; -import org.neo4j.driver.v1.Config; +import org.neo4j.driver.Config; import org.neo4j.shell.log.Logger; import static org.junit.Assert.assertEquals; @@ -60,12 +60,4 @@ public void password() throws Exception { public void driverUrlDefaultScheme() throws Exception { assertEquals("bolt://localhost:1", config.driverUrl()); } - - @Test - public void encryption() { - assertEquals(Config.EncryptionLevel.REQUIRED, - new ConnectionConfig("bolt://", "", -1, "", "", true).encryption()); - assertEquals(Config.EncryptionLevel.NONE, - new ConnectionConfig("bolt://", "", -1, "", "", false).encryption()); - } } diff --git a/geequel-shell/src/test/java/org/neo4j/shell/CypherShellTest.java b/geequel-shell/src/test/java/org/neo4j/shell/CypherShellTest.java index 370cacf..0fe588b 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/CypherShellTest.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/CypherShellTest.java @@ -23,11 +23,11 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import org.neo4j.driver.v1.Driver; -import org.neo4j.driver.v1.Record; -import org.neo4j.driver.v1.Session; -import org.neo4j.driver.v1.Value; -import org.neo4j.driver.v1.summary.ResultSummary; +import org.neo4j.driver.Driver; +import org.neo4j.driver.Record; +import org.neo4j.driver.Session; +import org.neo4j.driver.Value; +import org.neo4j.driver.summary.ResultSummary; import org.neo4j.shell.cli.CliArgHelper; import org.neo4j.shell.cli.CliArgs; import org.neo4j.shell.cli.NonInteractiveShellRunner; diff --git a/geequel-shell/src/test/java/org/neo4j/shell/MainTest.java b/geequel-shell/src/test/java/org/neo4j/shell/MainTest.java index 37a8c36..1c51c85 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/MainTest.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/MainTest.java @@ -24,8 +24,8 @@ import org.junit.Test; import org.junit.rules.ExpectedException; import org.mockito.ArgumentCaptor; -import org.neo4j.driver.v1.exceptions.AuthenticationException; -import org.neo4j.driver.v1.exceptions.Neo4jException; +import org.neo4j.driver.exceptions.AuthenticationException; +import org.neo4j.driver.exceptions.Neo4jException; import org.neo4j.shell.cli.CliArgs; import org.neo4j.shell.system.Utils; diff --git a/geequel-shell/src/test/java/org/neo4j/shell/cli/InteractiveShellRunnerTest.java b/geequel-shell/src/test/java/org/neo4j/shell/cli/InteractiveShellRunnerTest.java index 7a330c3..c18151e 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/cli/InteractiveShellRunnerTest.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/cli/InteractiveShellRunnerTest.java @@ -24,7 +24,7 @@ import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.rules.TemporaryFolder; -import org.neo4j.driver.v1.exceptions.ClientException; +import org.neo4j.driver.exceptions.ClientException; import org.neo4j.shell.CypherShell; import org.neo4j.shell.Historian; import org.neo4j.shell.StatementExecuter; diff --git a/geequel-shell/src/test/java/org/neo4j/shell/cli/NonInteractiveShellRunnerTest.java b/geequel-shell/src/test/java/org/neo4j/shell/cli/NonInteractiveShellRunnerTest.java index 6e10a44..ad38736 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/cli/NonInteractiveShellRunnerTest.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/cli/NonInteractiveShellRunnerTest.java @@ -23,7 +23,7 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import org.neo4j.driver.v1.exceptions.ClientException; +import org.neo4j.driver.exceptions.ClientException; import org.neo4j.shell.Historian; import org.neo4j.shell.StatementExecuter; import org.neo4j.shell.exception.CommandException; diff --git a/geequel-shell/src/test/java/org/neo4j/shell/cli/StringShellRunnerTest.java b/geequel-shell/src/test/java/org/neo4j/shell/cli/StringShellRunnerTest.java index 7b082bd..414a0e0 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/cli/StringShellRunnerTest.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/cli/StringShellRunnerTest.java @@ -23,7 +23,7 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import org.neo4j.driver.v1.exceptions.ClientException; +import org.neo4j.driver.exceptions.ClientException; import org.neo4j.shell.Historian; import org.neo4j.shell.StatementExecuter; import org.neo4j.shell.exception.CommandException; diff --git a/geequel-shell/src/test/java/org/neo4j/shell/log/AnsiLoggerTest.java b/geequel-shell/src/test/java/org/neo4j/shell/log/AnsiLoggerTest.java index 4658dbd..c20d9c2 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/log/AnsiLoggerTest.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/log/AnsiLoggerTest.java @@ -21,7 +21,7 @@ import org.junit.Before; import org.junit.Test; -import org.neo4j.driver.v1.exceptions.ClientException; +import org.neo4j.driver.exceptions.ClientException; import org.neo4j.shell.cli.Format; import org.neo4j.shell.exception.CommandException; diff --git a/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/OutputFormatterTest.java b/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/OutputFormatterTest.java index 796089a..e27e4b2 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/OutputFormatterTest.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/OutputFormatterTest.java @@ -31,12 +31,12 @@ import org.neo4j.driver.internal.util.ServerVersion; import org.neo4j.driver.internal.value.ListValue; import org.neo4j.driver.internal.value.MapValue; -import org.neo4j.driver.v1.Statement; -import org.neo4j.driver.v1.Value; -import org.neo4j.driver.v1.Values; -import org.neo4j.driver.v1.summary.ProfiledPlan; -import org.neo4j.driver.v1.summary.ResultSummary; -import org.neo4j.driver.v1.summary.StatementType; +import org.neo4j.driver.Statement; +import org.neo4j.driver.Value; +import org.neo4j.driver.Values; +import org.neo4j.driver.summary.ProfiledPlan; +import org.neo4j.driver.summary.ResultSummary; +import org.neo4j.driver.summary.StatementType; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.MatcherAssert.assertThat; diff --git a/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/PrettyPrinterTest.java b/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/PrettyPrinterTest.java index e7ca636..8446f32 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/PrettyPrinterTest.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/PrettyPrinterTest.java @@ -21,17 +21,17 @@ import org.junit.Test; import org.neo4j.driver.internal.types.InternalTypeSystem; -import org.neo4j.driver.v1.Record; -import org.neo4j.driver.v1.Value; -import org.neo4j.driver.v1.Values; -import org.neo4j.driver.v1.summary.ProfiledPlan; -import org.neo4j.driver.v1.summary.ResultSummary; -import org.neo4j.driver.v1.summary.StatementType; -import org.neo4j.driver.v1.summary.SummaryCounters; -import org.neo4j.driver.v1.types.Node; -import org.neo4j.driver.v1.types.Path; -import org.neo4j.driver.v1.types.Relationship; -import org.neo4j.driver.v1.util.Function; +import org.neo4j.driver.Record; +import org.neo4j.driver.Value; +import org.neo4j.driver.Values; +import org.neo4j.driver.summary.ProfiledPlan; +import org.neo4j.driver.summary.ResultSummary; +import org.neo4j.driver.summary.StatementType; +import org.neo4j.driver.summary.SummaryCounters; +import org.neo4j.driver.types.Node; +import org.neo4j.driver.types.Path; +import org.neo4j.driver.types.Relationship; +import org.neo4j.driver.util.Function; import org.neo4j.shell.cli.Format; import org.neo4j.shell.state.BoltResult; import org.neo4j.shell.state.ListBoltResult; diff --git a/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/StatisticsCollectorTest.java b/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/StatisticsCollectorTest.java index e35d211..616fab8 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/StatisticsCollectorTest.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/StatisticsCollectorTest.java @@ -20,8 +20,8 @@ package org.neo4j.shell.prettyprint; import org.junit.Test; -import org.neo4j.driver.v1.summary.ResultSummary; -import org.neo4j.driver.v1.summary.SummaryCounters; +import org.neo4j.driver.summary.ResultSummary; +import org.neo4j.driver.summary.SummaryCounters; import org.neo4j.shell.cli.Format; import static org.hamcrest.CoreMatchers.is; diff --git a/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/TableOutputFormatterTest.java b/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/TableOutputFormatterTest.java index 47dadf8..4c06c46 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/TableOutputFormatterTest.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/TableOutputFormatterTest.java @@ -41,17 +41,17 @@ import org.neo4j.driver.internal.value.PathValue; import org.neo4j.driver.internal.value.PointValue; import org.neo4j.driver.internal.value.RelationshipValue; -import org.neo4j.driver.v1.Record; -import org.neo4j.driver.v1.Statement; -import org.neo4j.driver.v1.StatementResult; -import org.neo4j.driver.v1.Value; -import org.neo4j.driver.v1.Values; -import org.neo4j.driver.v1.summary.ProfiledPlan; -import org.neo4j.driver.v1.summary.ResultSummary; -import org.neo4j.driver.v1.summary.StatementType; -import org.neo4j.driver.v1.types.Node; -import org.neo4j.driver.v1.types.Path; -import org.neo4j.driver.v1.types.Relationship; +import org.neo4j.driver.Record; +import org.neo4j.driver.Statement; +import org.neo4j.driver.Result; +import org.neo4j.driver.Value; +import org.neo4j.driver.Values; +import org.neo4j.driver.summary.ProfiledPlan; +import org.neo4j.driver.summary.ResultSummary; +import org.neo4j.driver.summary.StatementType; +import org.neo4j.driver.types.Node; +import org.neo4j.driver.types.Path; +import org.neo4j.driver.types.Relationship; import org.neo4j.shell.cli.Format; import org.neo4j.shell.state.BoltResult; import org.neo4j.shell.state.ListBoltResult; @@ -318,7 +318,7 @@ public void printRelationshipsAndNodesWithEscapingForSpecialCharacters() { @Test public void basicTable() { // GIVEN - StatementResult result = mockResult(asList("c1", "c2"), "a", 42); + Result result = mockResult(asList("c1", "c2"), "a", 42); // WHEN String table = formatResult(result); // THEN @@ -329,7 +329,7 @@ public void basicTable() { @Test public void twoRowsWithNumbersAllSampled() { // GIVEN - StatementResult result = mockResult(asList("c1", "c2"), "a", 42, "b", 43); + Result result = mockResult(asList("c1", "c2"), "a", 42, "b", 43); // WHEN String table = formatResult(result); // THEN @@ -340,7 +340,7 @@ public void twoRowsWithNumbersAllSampled() { @Test public void fiveRowsWithNumbersNotAllSampled() { // GIVEN - StatementResult result = mockResult(asList("c1", "c2"), "a", 42, "b", 43, "c", 44, "d", 45, "e", 46); + Result result = mockResult(asList("c1", "c2"), "a", 42, "b", 43, "c", 44, "d", 45, "e", 46); // WHEN String table = formatResult(result); // THEN @@ -355,7 +355,7 @@ public void fiveRowsWithNumbersNotAllSampled() { public void wrapStringContent() { // GIVEN - StatementResult result = mockResult( asList( "c1"), "a", "bb","ccc","dddd","eeeee" ); + Result result = mockResult( asList( "c1"), "a", "bb","ccc","dddd","eeeee" ); // WHEN ToStringLinePrinter printer = new ToStringLinePrinter(); new TableOutputFormatter(true, 2).formatAndCount(new ListBoltResult(result.list(), result.summary()), printer); @@ -381,7 +381,7 @@ public void wrapStringContent() public void wrapStringContentWithTwoColumns() { // GIVEN - StatementResult result = mockResult( asList( "c1", "c2" ), "a", "b", + Result result = mockResult( asList( "c1", "c2" ), "a", "b", "aa", "bb", "aaa", "b", "a", "bbb", @@ -417,7 +417,7 @@ public void wrapStringContentWithTwoColumns() public void wrapNumberContentWithLongSize() { // GIVEN - StatementResult result = mockResult( asList( "c1"), 345, 12, 978623, 132456798, 9223372036854775807L ); + Result result = mockResult( asList( "c1"), 345, 12, 978623, 132456798, 9223372036854775807L ); // WHEN ToStringLinePrinter printer = new ToStringLinePrinter(); new TableOutputFormatter(true, 2).formatAndCount(new ListBoltResult(result.list(), result.summary()), printer); @@ -440,7 +440,7 @@ public void wrapNumberContentWithLongSize() public void truncateContent() { // GIVEN - StatementResult result = mockResult( asList( "c1"), "a", "bb","ccc","dddd","eeeee" ); + Result result = mockResult( asList( "c1"), "a", "bb","ccc","dddd","eeeee" ); // WHEN ToStringLinePrinter printer = new ToStringLinePrinter(); new TableOutputFormatter(false, 2).formatAndCount(new ListBoltResult(result.list(), result.summary()), printer); @@ -462,7 +462,7 @@ public void truncateContent() @Test public void formatCollections() { // GIVEN - StatementResult result = mockResult(asList("a", "b", "c"), singletonMap("a", 42), asList(12, 13), + Result result = mockResult(asList("a", "b", "c"), singletonMap("a", 42), asList(12, 13), singletonMap("a", asList(14, 15))); // WHEN String table = formatResult(result); @@ -477,7 +477,7 @@ public void formatEntities() { Map relProperties = singletonMap("since", Values.value(2016)); InternalNode node = new InternalNode(12, asList("Person"), properties); InternalRelationship relationship = new InternalRelationship(24, 12, 12, "TEST", relProperties); - StatementResult result = + Result result = mockResult(asList("a", "b", "c"), node, relationship, new InternalPath(node, relationship, node)); // WHEN String table = formatResult(result); @@ -487,14 +487,14 @@ public void formatEntities() { "| (:Person {name: \"Mark\"})-[:TEST {since: 2016}]->(:Person {name: \"Mark\"}) |")); } - private String formatResult(StatementResult result) { + private String formatResult(Result result) { ToStringLinePrinter printer = new ToStringLinePrinter(); new TableOutputFormatter(true, 1000).formatAndCount(new ListBoltResult(result.list(), result.summary()), printer); return printer.result(); } - private StatementResult mockResult(List cols, Object... data) { - StatementResult result = mock(StatementResult.class); + private Result mockResult(List cols, Object... data) { + Result result = mock(Result.class); Statement statement = mock(Statement.class); ResultSummary summary = mock(ResultSummary.class); when(summary.statement()).thenReturn(statement); diff --git a/geequel-shell/src/test/java/org/neo4j/shell/state/BoltStateHandlerTest.java b/geequel-shell/src/test/java/org/neo4j/shell/state/BoltStateHandlerTest.java index 3106688..992305d 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/state/BoltStateHandlerTest.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/state/BoltStateHandlerTest.java @@ -23,19 +23,19 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import org.neo4j.driver.v1.AccessMode; -import org.neo4j.driver.v1.AuthToken; -import org.neo4j.driver.v1.Config; -import org.neo4j.driver.v1.Driver; -import org.neo4j.driver.v1.Record; -import org.neo4j.driver.v1.Session; -import org.neo4j.driver.v1.Statement; -import org.neo4j.driver.v1.StatementResult; -import org.neo4j.driver.v1.Transaction; -import org.neo4j.driver.v1.Value; -import org.neo4j.driver.v1.exceptions.SessionExpiredException; -import org.neo4j.driver.v1.summary.ResultSummary; -import org.neo4j.driver.v1.summary.ServerInfo; +import org.neo4j.driver.AccessMode; +import org.neo4j.driver.AuthToken; +import org.neo4j.driver.Config; +import org.neo4j.driver.Driver; +import org.neo4j.driver.Record; +import org.neo4j.driver.Session; +import org.neo4j.driver.Statement; +import org.neo4j.driver.Result; +import org.neo4j.driver.Transaction; +import org.neo4j.driver.Value; +import org.neo4j.driver.exceptions.SessionExpiredException; +import org.neo4j.driver.summary.ResultSummary; +import org.neo4j.driver.summary.ServerInfo; import org.neo4j.shell.ConnectionConfig; import org.neo4j.shell.TriFunction; import org.neo4j.shell.exception.CommandException; @@ -109,7 +109,7 @@ public Session session(AccessMode accessMode, String bookmark) { @Test public void versionIsNotEmptyAfterConnect() throws CommandException { - Driver driverMock = stubVersionInAnOpenSession(mock(StatementResult.class), mock(Session.class), "ONgDB/1.0.0-alpha01"); + Driver driverMock = stubVersionInAnOpenSession(mock(Result.class), mock(Session.class), "ONgDB/1.0.0-alpha01"); BoltStateHandler handler = new BoltStateHandler((s, authToken, config) -> driverMock); ConnectionConfig config = new ConnectionConfig("bolt://", "", -1, "", "", false); @@ -133,7 +133,7 @@ public void closeTransactionAfterRollback() throws CommandException { @Test public void exceptionsFromSilentDisconnectAreSuppressedToReportOriginalErrors() throws CommandException { Session session = mock(Session.class); - StatementResult resultMock = mock(StatementResult.class); + Result resultMock = mock(Result.class); RuntimeException originalException = new RuntimeException("original exception"); RuntimeException thrownFromSilentDisconnect = new RuntimeException("exception from silent disconnect"); @@ -198,9 +198,9 @@ public void whenInTransactionHandlerLetsTransactionDoTheWork() throws CommandExc Transaction transactionMock = mock(Transaction.class); Session sessionMock = mock(Session.class); when(sessionMock.beginTransaction()).thenReturn(transactionMock); - Driver driverMock = stubVersionInAnOpenSession(mock(StatementResult.class), sessionMock, "ongdb-version"); + Driver driverMock = stubVersionInAnOpenSession(mock(Result.class), sessionMock, "ongdb-version"); - StatementResult result = mock(StatementResult.class); + Result result = mock(Result.class); ResultSummary resultSummary = mock(ResultSummary.class); when(result.summary()).thenReturn(resultSummary); @@ -247,8 +247,8 @@ public void shouldExecuteInTransactionIfOpen() throws CommandException { @Test public void shouldRunCypherQuery() throws CommandException { Session sessionMock = mock(Session.class); - StatementResult versionMock = mock(StatementResult.class); - StatementResult resultMock = mock(StatementResult.class); + Result versionMock = mock(Result.class); + Result resultMock = mock(Result.class); Record recordMock = mock(Record.class); Value valueMock = mock(Value.class); @@ -274,8 +274,8 @@ public void shouldRunCypherQuery() throws CommandException { @Test public void triesAgainOnSessionExpired() throws Exception { Session sessionMock = mock(Session.class); - StatementResult versionMock = mock(StatementResult.class); - StatementResult resultMock = mock(StatementResult.class); + Result versionMock = mock(Result.class); + Result resultMock = mock(Result.class); Record recordMock = mock(Record.class); Value valueMock = mock(Value.class); @@ -326,7 +326,7 @@ public void canOnlyConnectOnce() throws CommandException { public void resetSessionOnReset() throws Exception { // given Session sessionMock = mock(Session.class); - Driver driverMock = stubVersionInAnOpenSession(mock(StatementResult.class), sessionMock, "ongdb-version"); + Driver driverMock = stubVersionInAnOpenSession(mock(Result.class), sessionMock, "ongdb-version"); OfflineBoltStateHandler boltStateHandler = new OfflineBoltStateHandler(driverMock); @@ -376,7 +376,7 @@ public void turnOnEncryptionIfRequested() throws CommandException { assertEquals(Config.EncryptionLevel.REQUIRED, provider.config.encryptionLevel()); } - private Driver stubVersionInAnOpenSession(StatementResult versionMock, Session sessionMock, String value) { + private Driver stubVersionInAnOpenSession(Result versionMock, Session sessionMock, String value) { Driver driverMock = mock(Driver.class); ResultSummary resultSummary = mock(ResultSummary.class); ServerInfo serverInfo = mock(ServerInfo.class); diff --git a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeDriver.java b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeDriver.java index 74b699c..25864ff 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeDriver.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeDriver.java @@ -19,10 +19,10 @@ */ package org.neo4j.shell.test.bolt; -import org.neo4j.driver.v1.AccessMode; -import org.neo4j.driver.v1.Driver; -import org.neo4j.driver.v1.Session; -import org.neo4j.driver.v1.exceptions.Neo4jException; +import org.neo4j.driver.AccessMode; +import org.neo4j.driver.Driver; +import org.neo4j.driver.Session; +import org.neo4j.driver.exceptions.Neo4jException; import java.util.concurrent.CompletionStage; diff --git a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeRecord.java b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeRecord.java index 0fdf3cd..cab1a0b 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeRecord.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeRecord.java @@ -19,14 +19,14 @@ */ package org.neo4j.shell.test.bolt; -import org.neo4j.driver.v1.Record; -import org.neo4j.driver.v1.Value; -import org.neo4j.driver.v1.types.Entity; -import org.neo4j.driver.v1.types.Node; -import org.neo4j.driver.v1.types.Path; -import org.neo4j.driver.v1.types.Relationship; -import org.neo4j.driver.v1.util.Function; -import org.neo4j.driver.v1.util.Pair; +import org.neo4j.driver.Record; +import org.neo4j.driver.Value; +import org.neo4j.driver.types.Entity; +import org.neo4j.driver.types.Node; +import org.neo4j.driver.types.Path; +import org.neo4j.driver.types.Relationship; +import org.neo4j.driver.util.Function; +import org.neo4j.driver.util.Pair; import org.neo4j.shell.test.Util; import javax.annotation.Nonnull; diff --git a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeResultSummary.java b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeResultSummary.java index e87b98f..3a8b9c8 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeResultSummary.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeResultSummary.java @@ -20,8 +20,8 @@ package org.neo4j.shell.test.bolt; import org.neo4j.driver.internal.summary.InternalSummaryCounters; -import org.neo4j.driver.v1.Statement; -import org.neo4j.driver.v1.summary.*; +import org.neo4j.driver.Statement; +import org.neo4j.driver.summary.*; import org.neo4j.shell.test.Util; import java.util.List; diff --git a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeSession.java b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeSession.java index 02ae004..cbfb218 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeSession.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeSession.java @@ -19,15 +19,15 @@ */ package org.neo4j.shell.test.bolt; -import org.neo4j.driver.v1.*; -import org.neo4j.driver.v1.types.TypeSystem; +import org.neo4j.driver.*; +import org.neo4j.driver.types.TypeSystem; import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; /** - * A fake session which returns fake StatementResults + * A fake session which returns fake Results */ public class FakeSession implements Session { private boolean open = true; @@ -106,37 +106,37 @@ public CompletionStage writeTransactionAsync( TransactionWork parameters, TransactionConfig config ) + public Result run( String statement, Map parameters, TransactionConfig config ) { - return FakeStatementResult.parseStatement(statement); + return FakeResult.parseStatement(statement); } @Override - public StatementResult run( Statement statement, TransactionConfig config ) + public Result run( Statement statement, TransactionConfig config ) { - return new FakeStatementResult(); + return new FakeResult(); } @Override - public CompletionStage runAsync( String statement, TransactionConfig config ) + public CompletionStage runAsync( String statement, TransactionConfig config ) { return null; } @Override - public CompletionStage runAsync( String statement, Map parameters, TransactionConfig config ) + public CompletionStage runAsync( String statement, Map parameters, TransactionConfig config ) { return null; } @Override - public CompletionStage runAsync( Statement statement, TransactionConfig config ) + public CompletionStage runAsync( Statement statement, TransactionConfig config ) { return null; } @@ -166,53 +166,53 @@ public CompletionStage closeAsync() { } @Override - public StatementResult run(String statementTemplate, Value parameters) { - return FakeStatementResult.parseStatement(statementTemplate); + public Result run(String statementTemplate, Value parameters) { + return FakeResult.parseStatement(statementTemplate); } @Override - public CompletionStage runAsync(String statementTemplate, Value parameters) { + public CompletionStage runAsync(String statementTemplate, Value parameters) { return null; } @Override - public StatementResult run(String statementTemplate, Map statementParameters) { - return FakeStatementResult.parseStatement(statementTemplate); + public Result run(String statementTemplate, Map statementParameters) { + return FakeResult.parseStatement(statementTemplate); } @Override - public CompletionStage runAsync(String statementTemplate, + public CompletionStage runAsync(String statementTemplate, Map statementParameters) { return null; } @Override - public StatementResult run(String statementTemplate, Record statementParameters) { - return FakeStatementResult.parseStatement(statementTemplate); + public Result run(String statementTemplate, Record statementParameters) { + return FakeResult.parseStatement(statementTemplate); } @Override - public CompletionStage runAsync(String statementTemplate, Record statementParameters) { + public CompletionStage runAsync(String statementTemplate, Record statementParameters) { return null; } @Override - public StatementResult run(String statementTemplate) { - return FakeStatementResult.parseStatement(statementTemplate); + public Result run(String statementTemplate) { + return FakeResult.parseStatement(statementTemplate); } @Override - public CompletionStage runAsync(String statementTemplate) { + public CompletionStage runAsync(String statementTemplate) { return null; } @Override - public StatementResult run(Statement statement) { - return new FakeStatementResult(); + public Result run(Statement statement) { + return new FakeResult(); } @Override - public CompletionStage runAsync(Statement statement) { + public CompletionStage runAsync(Statement statement) { return null; } diff --git a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeStatementResult.java b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeStatementResult.java index 490a4fa..a709572 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeStatementResult.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeStatementResult.java @@ -19,11 +19,11 @@ */ package org.neo4j.shell.test.bolt; -import org.neo4j.driver.v1.Record; -import org.neo4j.driver.v1.StatementResult; -import org.neo4j.driver.v1.exceptions.NoSuchRecordException; -import org.neo4j.driver.v1.summary.ResultSummary; -import org.neo4j.driver.v1.util.Function; +import org.neo4j.driver.Record; +import org.neo4j.driver.Result; +import org.neo4j.driver.exceptions.NoSuchRecordException; +import org.neo4j.driver.summary.ResultSummary; +import org.neo4j.driver.util.Function; import org.neo4j.shell.test.Util; import javax.annotation.Nonnull; @@ -36,14 +36,14 @@ import java.util.stream.Stream; /** - * A fake StatementResult with fake records and fake values + * A fake Result with fake records and fake values */ -class FakeStatementResult implements StatementResult { +class FakeResult implements Result { private final List records; private int currentRecord = -1; - FakeStatementResult() { + FakeResult() { records = new ArrayList<>(); } @@ -106,7 +106,7 @@ public ResultSummary summary() /** * Supports fake parsing of very limited cypher statements, only for basic test purposes */ - static FakeStatementResult parseStatement(@Nonnull final String statement) { + static FakeResult parseStatement(@Nonnull final String statement) { Pattern returnAsPattern = Pattern.compile("^return (.*) as (.*)$", Pattern.CASE_INSENSITIVE); Pattern returnPattern = Pattern.compile("^return (.*)$", Pattern.CASE_INSENSITIVE); @@ -120,9 +120,9 @@ static FakeStatementResult parseStatement(@Nonnull final String statement) { if (m.groupCount() > 1) { key = m.group(2); } - FakeStatementResult statementResult = new FakeStatementResult(); - statementResult.records.add(FakeRecord.of(key, value)); - return statementResult; + FakeResult Result = new FakeResult(); + Result.records.add(FakeRecord.of(key, value)); + return Result; } } throw new IllegalArgumentException("No idea how to parse this statement"); diff --git a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeTransaction.java b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeTransaction.java index fd13a76..02b7db3 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeTransaction.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeTransaction.java @@ -19,8 +19,8 @@ */ package org.neo4j.shell.test.bolt; -import org.neo4j.driver.v1.*; -import org.neo4j.driver.v1.types.TypeSystem; +import org.neo4j.driver.*; +import org.neo4j.driver.types.TypeSystem; import java.util.concurrent.CompletionStage; import java.util.Map; @@ -57,27 +57,27 @@ public CompletionStage rollbackAsync() { } @Override - public StatementResult run(String query, Value parameters) { + public Result run(String query, Value parameters) { return null; } @Override - public StatementResult run(String query, Map parameters) { + public Result run(String query, Map parameters) { return null; } @Override - public StatementResult run(String query, Record parameters) { + public Result run(String query, Record parameters) { return null; } @Override - public StatementResult run(String query) { + public Result run(String query) { return null; } @Override - public StatementResult run(Statement statement) { + public Result run(Statement statement) { return null; } @@ -87,28 +87,28 @@ public TypeSystem typeSystem() { } @Override - public CompletionStage runAsync( String statement, Map parameters) + public CompletionStage runAsync( String statement, Map parameters) { return null; } @Override - public CompletionStage runAsync(String statementTemplate, Value parameters) { + public CompletionStage runAsync(String statementTemplate, Value parameters) { return null; } @Override - public CompletionStage runAsync(String statementTemplate, Record statementParameters) { + public CompletionStage runAsync(String statementTemplate, Record statementParameters) { return null; } @Override - public CompletionStage runAsync(String statementTemplate) { + public CompletionStage runAsync(String statementTemplate) { return null; } @Override - public CompletionStage runAsync(Statement statement) { + public CompletionStage runAsync(Statement statement) { return null; } } diff --git a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeValue.java b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeValue.java index f484b16..6946169 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeValue.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeValue.java @@ -19,16 +19,16 @@ */ package org.neo4j.shell.test.bolt; -import org.neo4j.driver.v1.Value; -import org.neo4j.driver.v1.exceptions.value.Uncoercible; -import org.neo4j.driver.v1.types.Entity; -import org.neo4j.driver.v1.types.IsoDuration; -import org.neo4j.driver.v1.types.Node; -import org.neo4j.driver.v1.types.Path; -import org.neo4j.driver.v1.types.Point; -import org.neo4j.driver.v1.types.Relationship; -import org.neo4j.driver.v1.types.Type; -import org.neo4j.driver.v1.util.Function; +import org.neo4j.driver.Value; +import org.neo4j.driver.exceptions.value.Uncoercible; +import org.neo4j.driver.types.Entity; +import org.neo4j.driver.types.IsoDuration; +import org.neo4j.driver.types.Node; +import org.neo4j.driver.types.Path; +import org.neo4j.driver.types.Point; +import org.neo4j.driver.types.Relationship; +import org.neo4j.driver.types.Type; +import org.neo4j.driver.util.Function; import java.time.OffsetDateTime; import java.time.ZonedDateTime; From ec0d0ea2efe7f0f34420146079b96ce5e974d4c8 Mon Sep 17 00:00:00 2001 From: Spencer Perkins <95900100+SpecialThing44@users.noreply.github.com> Date: Tue, 19 Aug 2025 11:01:37 -0400 Subject: [PATCH 3/8] Remove extra logging --- geequel-shell/src/main/java/org/neo4j/shell/Main.java | 8 -------- .../main/java/org/neo4j/shell/cli/CliArgHelper.java | 6 +----- .../java/org/neo4j/shell/state/BoltStateHandler.java | 11 ----------- 3 files changed, 1 insertion(+), 24 deletions(-) diff --git a/geequel-shell/src/main/java/org/neo4j/shell/Main.java b/geequel-shell/src/main/java/org/neo4j/shell/Main.java index 61bec80..e130216 100644 --- a/geequel-shell/src/main/java/org/neo4j/shell/Main.java +++ b/geequel-shell/src/main/java/org/neo4j/shell/Main.java @@ -49,8 +49,6 @@ public class Main { public static void main(String[] args) { CliArgs cliArgs = CliArgHelper.parse(args); - System.out.println("Geequel-Shell parsed args " + Build.version()); - // if null, then command line parsing went wrong // CliArgs has already printed errors. if (cliArgs == null) { @@ -105,14 +103,10 @@ void startShell(@Nonnull CliArgs cliArgs) { cliArgs.getPassword(), cliArgs.getEncryption()); - System.out.println("Geequel-Shell connecting to " + connectionConfig.toString()); - try { CypherShell shell = new CypherShell(logger, prettyConfig); - System.out.println("Geequel-Shell created shell"); // Can only prompt for password if input has not been redirected connectMaybeInteractively(shell, connectionConfig, isInputInteractive(cliArgs), isOutputInteractive()); - System.out.println("Geequel-Shell connected to " + shell.getServerVersion()); // Construct shell runner after connecting, due to interrupt handling ShellRunner shellRunner = ShellRunner.getShellRunner(cliArgs, shell, logger, connectionConfig); @@ -148,13 +142,11 @@ void connectMaybeInteractively(@Nonnull CypherShell shell, try { // Try to connect - System.out.println("Geequel-Shell about to connect "); shell.connect(connectionConfig); } catch (AuthenticationException e) { // Fail if we already prompted, // or do not have interactive input, // or already tried with both username and password - System.out.println("Geequel-Shell failed to connect " + e.getMessage()); if (didPrompt || !inputInteractive || (!connectionConfig.username().isEmpty() && !connectionConfig.password().isEmpty())) { throw e; } diff --git a/geequel-shell/src/main/java/org/neo4j/shell/cli/CliArgHelper.java b/geequel-shell/src/main/java/org/neo4j/shell/cli/CliArgHelper.java index 238b6cd..229a613 100644 --- a/geequel-shell/src/main/java/org/neo4j/shell/cli/CliArgHelper.java +++ b/geequel-shell/src/main/java/org/neo4j/shell/cli/CliArgHelper.java @@ -52,18 +52,14 @@ public class CliArgHelper { public static CliArgs parse(@Nonnull String... args) { final ArgumentParser parser = setupParser(); final Namespace ns; - System.out.println("geequel-shell: " + format("Starting with arguments: %s", String.join(" ", args))); try { ns = parser.parseArgs(args); } catch (ArgumentParserException e) { - System.err.println("geequel-shell: parse error: " + e.getMessage()); parser.handleError(e); return null; } - - System.out.println("geequel-shell: " + format("Parsed arguments: %s", ns.toString())); - + // Parse address string, returns null on error final Matcher addressMatcher = parseAddressMatcher(parser, ns.getString("address")); diff --git a/geequel-shell/src/main/java/org/neo4j/shell/state/BoltStateHandler.java b/geequel-shell/src/main/java/org/neo4j/shell/state/BoltStateHandler.java index 0776b93..f68b00e 100644 --- a/geequel-shell/src/main/java/org/neo4j/shell/state/BoltStateHandler.java +++ b/geequel-shell/src/main/java/org/neo4j/shell/state/BoltStateHandler.java @@ -54,9 +54,7 @@ public BoltStateHandler() { } BoltStateHandler(TriFunction driverProvider) { - System.out.println("Creating BoltStateHandler"); this.driverProvider = driverProvider; - System.out.println("Created BoltStateHandler"); } @Override @@ -117,11 +115,8 @@ public void connect(@Nonnull ConnectionConfig connectionConfig) throws CommandEx final AuthToken authToken = AuthTokens.basic(connectionConfig.username(), connectionConfig.password()); try { - System.out.println("About to get driver"); driver = getDriver(connectionConfig, authToken); - System.out.println("Got driver"); reconnect(); - System.out.println("Reconnected"); } catch (Throwable t) { try { System.err.println("Error connecting to ONgDB: " + t.getMessage()); @@ -140,14 +135,10 @@ private void reconnect() { bookmark = session.lastBookmark(); session.close(); } - System.out.println("Reconnecting with bookmark: " + bookmark); SessionConfig sessionConfig = SessionConfig.builder().withDefaultAccessMode(AccessMode.WRITE).withBookmarks( bookmark).build(); session = driver.session(sessionConfig); - System.out.println("Reconnected with bookmark: " + session); Result run = session.run("RETURN 1"); - System.out.println("About to consume result"); this.version = run.consume().server().version(); - System.out.println("Consumed result, version: " + version); run.consume(); } @@ -254,9 +245,7 @@ private Driver getDriver(@Nonnull ConnectionConfig connectionConfig, @Nullable A Config config = Config.builder() .withLogging(NullLogging.NULL_LOGGING).withUserAgent( USER_AGENT ).build(); - System.out.println("About to get driver with authToken: " + authToken); String driverUrl = connectionConfig.driverUrl(); - System.out.println("About to get driver with url: " + driverUrl); return driverProvider.apply(driverUrl, authToken, config); } From fd5f342a81f47c14c03e504246506221637e8b4d Mon Sep 17 00:00:00 2001 From: Spencer Perkins <95900100+SpecialThing44@users.noreply.github.com> Date: Tue, 19 Aug 2025 12:55:52 -0400 Subject: [PATCH 4/8] Use java driver 4.2.20 which uses neo4j protocol for ongdb 1.1 --- .../src/main/java/org/neo4j/shell/cli/CliArgHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geequel-shell/src/main/java/org/neo4j/shell/cli/CliArgHelper.java b/geequel-shell/src/main/java/org/neo4j/shell/cli/CliArgHelper.java index 229a613..a79e08d 100644 --- a/geequel-shell/src/main/java/org/neo4j/shell/cli/CliArgHelper.java +++ b/geequel-shell/src/main/java/org/neo4j/shell/cli/CliArgHelper.java @@ -59,7 +59,7 @@ public static CliArgs parse(@Nonnull String... args) { parser.handleError(e); return null; } - + // Parse address string, returns null on error final Matcher addressMatcher = parseAddressMatcher(parser, ns.getString("address")); From 9ed4e2429870de615ff3044ced2d4b8b3d7d00c9 Mon Sep 17 00:00:00 2001 From: Spencer Perkins <95900100+SpecialThing44@users.noreply.github.com> Date: Tue, 19 Aug 2025 13:10:09 -0400 Subject: [PATCH 5/8] Fix tests --- .../org/neo4j/shell/ConnectionConfig.java | 7 ++ .../neo4j/shell/state/BoltStateHandler.java | 7 +- .../prettyprint/OutputFormatterTest.java | 12 +- .../shell/prettyprint/PrettyPrinterTest.java | 10 +- .../prettyprint/TableOutputFormatterTest.java | 27 ++-- .../shell/state/BoltStateHandlerTest.java | 47 +++---- .../org/neo4j/shell/test/bolt/FakeDriver.java | 60 +++++++-- .../org/neo4j/shell/test/bolt/FakeRecord.java | 12 +- .../shell/test/bolt/FakeResultSummary.java | 26 +++- .../neo4j/shell/test/bolt/FakeSession.java | 117 ++---------------- .../shell/test/bolt/FakeStatementResult.java | 9 +- .../shell/test/bolt/FakeTransaction.java | 58 ++------- .../org/neo4j/shell/test/bolt/FakeValue.java | 33 ++--- 13 files changed, 168 insertions(+), 257 deletions(-) diff --git a/geequel-shell/src/main/java/org/neo4j/shell/ConnectionConfig.java b/geequel-shell/src/main/java/org/neo4j/shell/ConnectionConfig.java index 974875c..ab61a8c 100644 --- a/geequel-shell/src/main/java/org/neo4j/shell/ConnectionConfig.java +++ b/geequel-shell/src/main/java/org/neo4j/shell/ConnectionConfig.java @@ -29,6 +29,7 @@ public class ConnectionConfig { private final int port; private String username; private String password; + private boolean encryption; public ConnectionConfig(@Nonnull String scheme, @Nonnull String host, int port, @Nonnull String username, @Nonnull String password, boolean encryption) { @@ -37,6 +38,7 @@ public ConnectionConfig(@Nonnull String scheme, @Nonnull String host, int port, this.username = fallbackToEnvVariable(username, "ONGDB_USERNAME"); this.password = fallbackToEnvVariable(password, "ONGDB_PASSWORD"); this.scheme = scheme; + this.encryption = encryption; } /** @@ -75,6 +77,11 @@ public String password() { return password; } + @Nonnull + public Boolean encryption() { + return encryption; + } + @Nonnull public String driverUrl() { return String.format("%s%s:%d", scheme(), host(), port()); diff --git a/geequel-shell/src/main/java/org/neo4j/shell/state/BoltStateHandler.java b/geequel-shell/src/main/java/org/neo4j/shell/state/BoltStateHandler.java index f68b00e..ab70b14 100644 --- a/geequel-shell/src/main/java/org/neo4j/shell/state/BoltStateHandler.java +++ b/geequel-shell/src/main/java/org/neo4j/shell/state/BoltStateHandler.java @@ -139,7 +139,6 @@ private void reconnect() { session = driver.session(sessionConfig); Result run = session.run("RETURN 1"); this.version = run.consume().server().version(); - run.consume(); } @Nonnull @@ -242,8 +241,10 @@ public void reset() { } private Driver getDriver(@Nonnull ConnectionConfig connectionConfig, @Nullable AuthToken authToken) { - Config config = Config.builder() - .withLogging(NullLogging.NULL_LOGGING).withUserAgent( USER_AGENT ).build(); + Config.ConfigBuilder configBuilder = Config.builder() + .withLogging(NullLogging.NULL_LOGGING).withUserAgent( USER_AGENT ); + Config config; + if (connectionConfig.encryption()){config = configBuilder.withEncryption().build();} else {config = configBuilder.build();} String driverUrl = connectionConfig.driverUrl(); return driverProvider.apply(driverUrl, authToken, config); diff --git a/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/OutputFormatterTest.java b/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/OutputFormatterTest.java index e27e4b2..804b719 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/OutputFormatterTest.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/OutputFormatterTest.java @@ -25,18 +25,19 @@ import java.util.HashMap; import java.util.Map; +import org.neo4j.driver.Query; import org.neo4j.driver.internal.BoltServerAddress; +import org.neo4j.driver.internal.messaging.BoltProtocolVersion; import org.neo4j.driver.internal.summary.InternalResultSummary; import org.neo4j.driver.internal.summary.InternalServerInfo; import org.neo4j.driver.internal.util.ServerVersion; import org.neo4j.driver.internal.value.ListValue; import org.neo4j.driver.internal.value.MapValue; -import org.neo4j.driver.Statement; import org.neo4j.driver.Value; import org.neo4j.driver.Values; import org.neo4j.driver.summary.ProfiledPlan; +import org.neo4j.driver.summary.QueryType; import org.neo4j.driver.summary.ResultSummary; -import org.neo4j.driver.summary.StatementType; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.MatcherAssert.assertThat; @@ -52,9 +53,10 @@ public void shouldReportTotalDBHits() { ProfiledPlan plan = PROFILED_PLAN_FROM_VALUE.apply( planMap ); ResultSummary summary = new InternalResultSummary( - new Statement( "PROFILE MATCH (n:LABEL) WHERE 20 < n.age < 35 return n" ), - new InternalServerInfo( new BoltServerAddress( "localhost:7687" ), ServerVersion.vInDev ), - StatementType.READ_ONLY, + new Query( "PROFILE MATCH (n:LABEL) WHERE 20 < n.age < 35 return n" ), + new InternalServerInfo( "testAgent", new BoltServerAddress( "localhost:7687" ), ServerVersion.vInDev, new BoltProtocolVersion(3, 5) ), + null, + QueryType.READ_ONLY, null, plan, plan, diff --git a/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/PrettyPrinterTest.java b/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/PrettyPrinterTest.java index 8446f32..6e7db7f 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/PrettyPrinterTest.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/PrettyPrinterTest.java @@ -25,13 +25,12 @@ import org.neo4j.driver.Value; import org.neo4j.driver.Values; import org.neo4j.driver.summary.ProfiledPlan; +import org.neo4j.driver.summary.QueryType; import org.neo4j.driver.summary.ResultSummary; -import org.neo4j.driver.summary.StatementType; import org.neo4j.driver.summary.SummaryCounters; import org.neo4j.driver.types.Node; import org.neo4j.driver.types.Path; import org.neo4j.driver.types.Relationship; -import org.neo4j.driver.util.Function; import org.neo4j.shell.cli.Format; import org.neo4j.shell.state.BoltResult; import org.neo4j.shell.state.ListBoltResult; @@ -39,6 +38,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.function.Function; import java.util.stream.Stream; import static java.util.Arrays.asList; @@ -91,7 +91,7 @@ public void prettyPrintProfileInformation() { when(resultSummary.profile()).thenReturn(plan); when(resultSummary.resultAvailableAfter(anyObject())).thenReturn(5L); when(resultSummary.resultConsumedAfter(anyObject())).thenReturn(7L); - when(resultSummary.statementType()).thenReturn(StatementType.READ_ONLY); + when(resultSummary.queryType()).thenReturn(QueryType.READ_ONLY); Map argumentMap = Values.parameters("Version", "3.1", "Planner", "COST", "Runtime", "INTERPRETED").asMap(v -> v); when(plan.arguments()).thenReturn(argumentMap); @@ -126,7 +126,7 @@ public void prettyPrintExplainInformation() { when(resultSummary.plan()).thenReturn(plan); when(resultSummary.resultAvailableAfter(anyObject())).thenReturn(5L); when(resultSummary.resultConsumedAfter(anyObject())).thenReturn(7L); - when(resultSummary.statementType()).thenReturn(StatementType.READ_ONLY); + when(resultSummary.queryType()).thenReturn(QueryType.READ_ONLY); Map argumentMap = Values.parameters("Version", "3.1", "Planner", "COST", "Runtime", "INTERPRETED").asMap(v -> v); when(plan.arguments()).thenReturn(argumentMap); @@ -183,9 +183,7 @@ private void checkMapForPrettyPrint(Map map, String expectedResu Value value = mock(Value.class); when(value.type()).thenReturn(InternalTypeSystem.TYPE_SYSTEM.MAP()); - when(value.asMap((Function) anyObject())).thenReturn(map); - when(record.keys()).thenReturn(asList("map")); when(record.values()).thenReturn(asList(value)); diff --git a/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/TableOutputFormatterTest.java b/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/TableOutputFormatterTest.java index 4c06c46..3400080 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/TableOutputFormatterTest.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/prettyprint/TableOutputFormatterTest.java @@ -29,6 +29,7 @@ import java.util.List; import java.util.Map; +import org.neo4j.driver.*; import org.neo4j.driver.internal.InternalIsoDuration; import org.neo4j.driver.internal.InternalNode; import org.neo4j.driver.internal.InternalPath; @@ -41,14 +42,9 @@ import org.neo4j.driver.internal.value.PathValue; import org.neo4j.driver.internal.value.PointValue; import org.neo4j.driver.internal.value.RelationshipValue; -import org.neo4j.driver.Record; -import org.neo4j.driver.Statement; -import org.neo4j.driver.Result; -import org.neo4j.driver.Value; -import org.neo4j.driver.Values; import org.neo4j.driver.summary.ProfiledPlan; +import org.neo4j.driver.summary.QueryType; import org.neo4j.driver.summary.ResultSummary; -import org.neo4j.driver.summary.StatementType; import org.neo4j.driver.types.Node; import org.neo4j.driver.types.Path; import org.neo4j.driver.types.Relationship; @@ -86,7 +82,7 @@ public void prettyPrintPlanInformation() { when(resultSummary.profile()).thenReturn(plan); when(resultSummary.resultAvailableAfter(anyObject())).thenReturn(5L); when(resultSummary.resultConsumedAfter(anyObject())).thenReturn(7L); - when(resultSummary.statementType()).thenReturn(StatementType.READ_ONLY); + when(resultSummary.queryType()).thenReturn(QueryType.READ_ONLY); Map argumentMap = Values.parameters("Version", "3.1", "Planner", "COST", "Runtime", "INTERPRETED").asMap(v -> v); when(plan.arguments()).thenReturn(argumentMap); @@ -113,7 +109,7 @@ public void prettyPrintPlanInformationWithNewlines() { when(resultSummary.plan()).thenReturn(plan); when(resultSummary.resultAvailableAfter(anyObject())).thenReturn(5L); when(resultSummary.resultConsumedAfter(anyObject())).thenReturn(7L); - when(resultSummary.statementType()).thenReturn(StatementType.READ_ONLY); + when(resultSummary.queryType()).thenReturn(QueryType.READ_ONLY); Map argumentMap = Values.parameters("Version", "3.1", "Planner", "COST", "Runtime", "INTERPRETED").asMap(v -> v); when(plan.arguments()).thenReturn(argumentMap); @@ -358,7 +354,7 @@ public void wrapStringContent() Result result = mockResult( asList( "c1"), "a", "bb","ccc","dddd","eeeee" ); // WHEN ToStringLinePrinter printer = new ToStringLinePrinter(); - new TableOutputFormatter(true, 2).formatAndCount(new ListBoltResult(result.list(), result.summary()), printer); + new TableOutputFormatter(true, 2).formatAndCount(new ListBoltResult(result.list(), result.consume()), printer); String table = printer.result(); // THEN assertThat(table, is(String.join(NEWLINE, @@ -390,7 +386,7 @@ public void wrapStringContentWithTwoColumns() "aaaaa", "bbbbb" ); // WHEN ToStringLinePrinter printer = new ToStringLinePrinter(); - new TableOutputFormatter(true, 2).formatAndCount(new ListBoltResult(result.list(), result.summary()), printer); + new TableOutputFormatter(true, 2).formatAndCount(new ListBoltResult(result.list(), result.consume()), printer); String table = printer.result(); // THEN assertThat(table, is(String.join(NEWLINE, @@ -420,7 +416,7 @@ public void wrapNumberContentWithLongSize() Result result = mockResult( asList( "c1"), 345, 12, 978623, 132456798, 9223372036854775807L ); // WHEN ToStringLinePrinter printer = new ToStringLinePrinter(); - new TableOutputFormatter(true, 2).formatAndCount(new ListBoltResult(result.list(), result.summary()), printer); + new TableOutputFormatter(true, 2).formatAndCount(new ListBoltResult(result.list(), result.consume()), printer); String table = printer.result(); // THEN assertThat(table, is(String.join(NEWLINE, @@ -443,7 +439,7 @@ public void truncateContent() Result result = mockResult( asList( "c1"), "a", "bb","ccc","dddd","eeeee" ); // WHEN ToStringLinePrinter printer = new ToStringLinePrinter(); - new TableOutputFormatter(false, 2).formatAndCount(new ListBoltResult(result.list(), result.summary()), printer); + new TableOutputFormatter(false, 2).formatAndCount(new ListBoltResult(result.list(), result.consume()), printer); String table = printer.result(); // THEN assertThat(table, is(String.join(NEWLINE, @@ -489,15 +485,15 @@ public void formatEntities() { private String formatResult(Result result) { ToStringLinePrinter printer = new ToStringLinePrinter(); - new TableOutputFormatter(true, 1000).formatAndCount(new ListBoltResult(result.list(), result.summary()), printer); + new TableOutputFormatter(true, 1000).formatAndCount(new ListBoltResult(result.list(), result.consume()), printer); return printer.result(); } private Result mockResult(List cols, Object... data) { Result result = mock(Result.class); - Statement statement = mock(Statement.class); + Query statement = mock(Query.class); ResultSummary summary = mock(ResultSummary.class); - when(summary.statement()).thenReturn(statement); + when(summary.query()).thenReturn(statement); when(result.keys()).thenReturn(cols); List records = new ArrayList<>(); List input = asList(data); @@ -507,7 +503,6 @@ private Result mockResult(List cols, Object... data) { } when(result.list()).thenReturn(records); when(result.consume()).thenReturn(summary); - when(result.summary()).thenReturn(summary); return result; } diff --git a/geequel-shell/src/test/java/org/neo4j/shell/state/BoltStateHandlerTest.java b/geequel-shell/src/test/java/org/neo4j/shell/state/BoltStateHandlerTest.java index 992305d..e8f2237 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/state/BoltStateHandlerTest.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/state/BoltStateHandlerTest.java @@ -23,16 +23,7 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import org.neo4j.driver.AccessMode; -import org.neo4j.driver.AuthToken; -import org.neo4j.driver.Config; -import org.neo4j.driver.Driver; -import org.neo4j.driver.Record; -import org.neo4j.driver.Session; -import org.neo4j.driver.Statement; -import org.neo4j.driver.Result; -import org.neo4j.driver.Transaction; -import org.neo4j.driver.Value; +import org.neo4j.driver.*; import org.neo4j.driver.exceptions.SessionExpiredException; import org.neo4j.driver.summary.ResultSummary; import org.neo4j.driver.summary.ServerInfo; @@ -45,8 +36,6 @@ import java.util.Collections; import java.util.HashMap; -import java.util.List; -import java.util.Optional; import static java.util.Arrays.asList; import static org.hamcrest.CoreMatchers.is; @@ -57,7 +46,6 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.anyObject; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; @@ -76,7 +64,8 @@ public class BoltStateHandlerTest { @Before public void setup() { - when(mockDriver.session(any(), anyString())).thenReturn(new FakeSession()); + when(mockDriver.session()).thenReturn(new FakeSession()); + when(mockDriver.session(any())).thenReturn(new FakeSession()); doReturn(System.out).when(logger).getOutputStream(); } @@ -94,9 +83,9 @@ public Driver apply(String uri, AuthToken authToken, Config config) { super.apply(uri, authToken, config); return new FakeDriver() { @Override - public Session session(AccessMode accessMode, String bookmark) { - return new FakeSession(); - } + public Session session() { + return new FakeSession(); + } }; } }; @@ -202,9 +191,9 @@ public void whenInTransactionHandlerLetsTransactionDoTheWork() throws CommandExc Result result = mock(Result.class); ResultSummary resultSummary = mock(ResultSummary.class); - when(result.summary()).thenReturn(resultSummary); + when(result.consume()).thenReturn(resultSummary); - when(transactionMock.run((Statement) anyObject())).thenReturn(result); + when(transactionMock.run((Query) anyObject())).thenReturn(result); OfflineBoltStateHandler boltStateHandler = new OfflineBoltStateHandler(driverMock); boltStateHandler.connect(); @@ -258,7 +247,7 @@ public void shouldRunCypherQuery() throws CommandException { when(valueMock.toString()).thenReturn("999"); when(recordMock.get(0)).thenReturn(valueMock); - when(sessionMock.run(any(Statement.class))).thenReturn(resultMock); + when(sessionMock.run(any(Query.class))).thenReturn(resultMock); OfflineBoltStateHandler boltStateHandler = new OfflineBoltStateHandler(driverMock); @@ -266,7 +255,7 @@ public void shouldRunCypherQuery() throws CommandException { BoltResult boltResult = boltStateHandler.runCypher("RETURN 999", new HashMap<>()).get(); - verify(sessionMock).run(any(Statement.class)); + verify(sessionMock).run(any(Query.class)); assertEquals("999", boltResult.getRecords().get(0).get(0).toString()); } @@ -285,7 +274,7 @@ public void triesAgainOnSessionExpired() throws Exception { when(valueMock.toString()).thenReturn("999"); when(recordMock.get(0)).thenReturn(valueMock); - when(sessionMock.run(any(Statement.class))) + when(sessionMock.run(any(Query.class))) .thenThrow(new SessionExpiredException("leaderswitch")) .thenReturn(resultMock); @@ -295,8 +284,8 @@ public void triesAgainOnSessionExpired() throws Exception { BoltResult boltResult = boltStateHandler.runCypher("RETURN 999", new HashMap<>()).get(); - verify(driverMock, times(2)).session(any(), anyString()); - verify(sessionMock, times(2)).run(any(Statement.class)); + verify(driverMock, times(2)).session(any()); + verify(sessionMock, times(2)).run(any(Query.class)); assertEquals("999", boltResult.getRecords().get(0).get(0).toString()); } @@ -364,7 +353,7 @@ public void turnOffEncryptionIfRequested() throws CommandException { BoltStateHandler handler = new BoltStateHandler(provider); ConnectionConfig config = new ConnectionConfig("bolt://", "", -1, "", "", false); handler.connect(config); - assertEquals(Config.EncryptionLevel.NONE, provider.config.encryptionLevel()); + assertFalse(provider.config.encrypted()); } @Test @@ -373,7 +362,7 @@ public void turnOnEncryptionIfRequested() throws CommandException { BoltStateHandler handler = new BoltStateHandler(provider); ConnectionConfig config = new ConnectionConfig("bolt://", "", -1, "", "", true); handler.connect(config); - assertEquals(Config.EncryptionLevel.REQUIRED, provider.config.encryptionLevel()); + assertTrue(provider.config.encrypted()); } private Driver stubVersionInAnOpenSession(Result versionMock, Session sessionMock, String value) { @@ -383,11 +372,13 @@ private Driver stubVersionInAnOpenSession(Result versionMock, Session sessionMoc when(resultSummary.server()).thenReturn(serverInfo); when(serverInfo.version()).thenReturn(value); - when(versionMock.summary()).thenReturn(resultSummary); + when(versionMock.consume()).thenReturn(resultSummary); when(sessionMock.isOpen()).thenReturn(true); when(sessionMock.run("RETURN 1")).thenReturn(versionMock); - when(driverMock.session(any(), anyString())).thenReturn(sessionMock); + when(driverMock.session()).thenReturn(sessionMock); + when(driverMock.session(any())).thenReturn(sessionMock); + return driverMock; } diff --git a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeDriver.java b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeDriver.java index 25864ff..1004374 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeDriver.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeDriver.java @@ -19,10 +19,11 @@ */ package org.neo4j.shell.test.bolt; -import org.neo4j.driver.AccessMode; -import org.neo4j.driver.Driver; -import org.neo4j.driver.Session; +import org.neo4j.driver.*; +import org.neo4j.driver.async.AsyncSession; import org.neo4j.driver.exceptions.Neo4jException; +import org.neo4j.driver.reactive.RxSession; +import org.neo4j.driver.types.TypeSystem; import java.util.concurrent.CompletionStage; @@ -38,28 +39,28 @@ public Session session() { } @Override - public Session session(AccessMode mode) { + public Session session(SessionConfig sessionConfig) { return new FakeSession(); } @Override - public Session session(String bookmark) { - return new FakeSession(); + public RxSession rxSession() { + return null; } @Override - public Session session(AccessMode mode, String bookmark) { - return new FakeSession(); + public RxSession rxSession(SessionConfig sessionConfig) { + return null; } @Override - public Session session(Iterable bookmarks) { - return new FakeSession(); + public AsyncSession asyncSession() { + return null; } @Override - public Session session(AccessMode mode, Iterable bookmarks) { - return new FakeSession(); + public AsyncSession asyncSession(SessionConfig sessionConfig) { + return null; } @Override @@ -70,4 +71,39 @@ public void close() throws Neo4jException { public CompletionStage closeAsync() { return null; } + + @Override + public Metrics metrics() { + return null; + } + + @Override + public boolean isMetricsEnabled() { + return false; + } + + @Override + public TypeSystem defaultTypeSystem() { + return null; + } + + @Override + public void verifyConnectivity() { + + } + + @Override + public CompletionStage verifyConnectivityAsync() { + return null; + } + + @Override + public boolean supportsMultiDb() { + return false; + } + + @Override + public CompletionStage supportsMultiDbAsync() { + return null; + } } diff --git a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeRecord.java b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeRecord.java index cab1a0b..b2e4f85 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeRecord.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeRecord.java @@ -25,14 +25,15 @@ import org.neo4j.driver.types.Node; import org.neo4j.driver.types.Path; import org.neo4j.driver.types.Relationship; -import org.neo4j.driver.util.Function; import org.neo4j.driver.util.Pair; import org.neo4j.shell.test.Util; import javax.annotation.Nonnull; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.TreeMap; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -55,6 +56,11 @@ public List values() { return valueMap.values().stream().collect(Collectors.toList()); } + @Override + public Iterable values(Function function) { + return null; + } + @Override public boolean containsKey(String key) { return valueMap.containsKey(key); @@ -242,8 +248,8 @@ public List get(String key, List defaultValue) { } @Override - public List get(String key, List defaultValue, Function mapFunc) { - return null; + public List get(String s, List list, Function function) { + return Collections.emptyList(); } @Override diff --git a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeResultSummary.java b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeResultSummary.java index 3a8b9c8..898aee3 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeResultSummary.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeResultSummary.java @@ -19,8 +19,8 @@ */ package org.neo4j.shell.test.bolt; +import org.neo4j.driver.Query; import org.neo4j.driver.internal.summary.InternalSummaryCounters; -import org.neo4j.driver.Statement; import org.neo4j.driver.summary.*; import org.neo4j.shell.test.Util; @@ -31,9 +31,10 @@ * A fake result summary */ class FakeResultSummary implements ResultSummary { + @Override - public Statement statement() { - throw new Util.NotImplementedYetException("Not implemented yet"); + public Query query() { + return null; } @Override @@ -42,8 +43,8 @@ public SummaryCounters counters() { } @Override - public StatementType statementType() { - throw new Util.NotImplementedYetException("Not implemented yet"); + public QueryType queryType() { + return null; } @Override @@ -97,6 +98,21 @@ public String version() { return null; } + + @Override + public String protocolVersion() { + return null; + } + + @Override + public String agent() { + return null; + } }; } + + @Override + public DatabaseInfo database() { + return null; + } } diff --git a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeSession.java b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeSession.java index cbfb218..8947744 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeSession.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeSession.java @@ -38,28 +38,10 @@ public Transaction beginTransaction() { } @Override - public Transaction beginTransaction( TransactionConfig config ) - { + public Transaction beginTransaction(TransactionConfig config) { return null; } - @Override - public Transaction beginTransaction(String bookmark) { - return null; - } - - @Override - public CompletionStage beginTransactionAsync() { - return null; - } - - @Override - public CompletionStage beginTransactionAsync( TransactionConfig config ) - { - CompletableFuture transactionFuture = new CompletableFuture<>(); - transactionFuture.runAsync(() -> new FakeTransaction()); - return transactionFuture; - } @Override public T readTransaction(TransactionWork work) { @@ -67,19 +49,7 @@ public T readTransaction(TransactionWork work) { } @Override - public T readTransaction( TransactionWork work, TransactionConfig config ) - { - return null; - } - - @Override - public CompletionStage readTransactionAsync(TransactionWork> work) { - return null; - } - - @Override - public CompletionStage readTransactionAsync( TransactionWork> work, TransactionConfig config ) - { + public T readTransaction(TransactionWork work, TransactionConfig config) { return null; } @@ -89,60 +59,27 @@ public T writeTransaction(TransactionWork work) { } @Override - public T writeTransaction( TransactionWork work, TransactionConfig config ) - { - return null; - } - - @Override - public CompletionStage writeTransactionAsync(TransactionWork> work) { - return null; - } - - @Override - public CompletionStage writeTransactionAsync( TransactionWork> work, TransactionConfig config ) - { + public T writeTransaction(TransactionWork work, TransactionConfig config) { return null; } @Override - public Result run( String statement, TransactionConfig config ) - { + public Result run(String statement, TransactionConfig config) { return FakeResult.parseStatement(statement); } @Override - public Result run( String statement, Map parameters, TransactionConfig config ) - { + public Result run(String statement, Map parameters, TransactionConfig config) { return FakeResult.parseStatement(statement); } @Override - public Result run( Statement statement, TransactionConfig config ) - { - return new FakeResult(); - } - - @Override - public CompletionStage runAsync( String statement, TransactionConfig config ) - { - return null; - } - - @Override - public CompletionStage runAsync( String statement, Map parameters, TransactionConfig config ) - { - return null; - } - - @Override - public CompletionStage runAsync( Statement statement, TransactionConfig config ) - { - return null; + public Result run(Query query, TransactionConfig transactionConfig) { + return FakeResult.parseStatement(query.text()); } @Override - public String lastBookmark() { + public Bookmark lastBookmark() { return null; } @@ -160,64 +97,30 @@ public void close() { open = false; } - @Override - public CompletionStage closeAsync() { - return null; - } @Override public Result run(String statementTemplate, Value parameters) { return FakeResult.parseStatement(statementTemplate); } - @Override - public CompletionStage runAsync(String statementTemplate, Value parameters) { - return null; - } - @Override public Result run(String statementTemplate, Map statementParameters) { return FakeResult.parseStatement(statementTemplate); } - @Override - public CompletionStage runAsync(String statementTemplate, - Map statementParameters) { - return null; - } @Override public Result run(String statementTemplate, Record statementParameters) { return FakeResult.parseStatement(statementTemplate); } - @Override - public CompletionStage runAsync(String statementTemplate, Record statementParameters) { - return null; - } - @Override public Result run(String statementTemplate) { return FakeResult.parseStatement(statementTemplate); } @Override - public CompletionStage runAsync(String statementTemplate) { - return null; - } - - @Override - public Result run(Statement statement) { - return new FakeResult(); - } - - @Override - public CompletionStage runAsync(Statement statement) { - return null; - } - - @Override - public TypeSystem typeSystem() { - return null; + public Result run(Query query) { + return FakeResult.parseStatement(query.text()); } } diff --git a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeStatementResult.java b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeStatementResult.java index a709572..954bcf0 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeStatementResult.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeStatementResult.java @@ -23,13 +23,13 @@ import org.neo4j.driver.Result; import org.neo4j.driver.exceptions.NoSuchRecordException; import org.neo4j.driver.summary.ResultSummary; -import org.neo4j.driver.util.Function; import org.neo4j.shell.test.Util; import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.function.Function; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -87,6 +87,7 @@ public List list() { return records; } + @Override public List list(Function mapFunction) { throw new Util.NotImplementedYetException("Not implemented yet"); @@ -97,12 +98,6 @@ public ResultSummary consume() { return new FakeResultSummary(); } - @Override - public ResultSummary summary() - { - return new FakeResultSummary(); - } - /** * Supports fake parsing of very limited cypher statements, only for basic test purposes */ diff --git a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeTransaction.java b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeTransaction.java index 02b7db3..91c933c 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeTransaction.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeTransaction.java @@ -31,13 +31,13 @@ public boolean isOpen() { return true; } - @Override - public void success() { + @Override + public void commit() { } @Override - public void failure() { + public void rollback() { } @@ -46,69 +46,29 @@ public void close() { } - @Override - public CompletionStage commitAsync() { - return null; - } - - @Override - public CompletionStage rollbackAsync() { - return null; - } - @Override public Result run(String query, Value parameters) { - return null; + return FakeResult.parseStatement(query); } @Override public Result run(String query, Map parameters) { - return null; + return FakeResult.parseStatement(query); } @Override public Result run(String query, Record parameters) { - return null; + return FakeResult.parseStatement(query); } @Override public Result run(String query) { - return null; - } - - @Override - public Result run(Statement statement) { - return null; + return FakeResult.parseStatement(query); } @Override - public TypeSystem typeSystem() { - return null; + public Result run(Query query) { + return FakeResult.parseStatement(query.text()); } - @Override - public CompletionStage runAsync( String statement, Map parameters) - { - return null; - } - - @Override - public CompletionStage runAsync(String statementTemplate, Value parameters) { - return null; - } - - @Override - public CompletionStage runAsync(String statementTemplate, Record statementParameters) { - return null; - } - - @Override - public CompletionStage runAsync(String statementTemplate) { - return null; - } - - @Override - public CompletionStage runAsync(Statement statement) { - return null; - } } diff --git a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeValue.java b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeValue.java index 6946169..acf15b2 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeValue.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeValue.java @@ -28,7 +28,6 @@ import org.neo4j.driver.types.Point; import org.neo4j.driver.types.Relationship; import org.neo4j.driver.types.Type; -import org.neo4j.driver.util.Function; import java.time.OffsetDateTime; import java.time.ZonedDateTime; @@ -36,8 +35,10 @@ import java.time.LocalDateTime; import java.time.LocalTime; import java.time.OffsetTime; +import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.function.Function; /** * A fake value @@ -60,7 +61,7 @@ public Iterable values() { } @Override - public Iterable values(Function mapFunction) { + public Iterable values(Function function) { return null; } @@ -70,8 +71,8 @@ public Map asMap() { } @Override - public Map asMap(Function mapFunction) { - throw new Uncoercible(getClass().getSimpleName(), "Map"); + public Map asMap(Function function) { + return Collections.emptyMap(); } @Override @@ -130,8 +131,8 @@ public Object asObject() { } @Override - public T computeOrDefault(Function mapper, T defaultValue) { - throw new UnsupportedOperationException("No implementation"); + public T computeOrDefault(Function function, T t) { + return null; } @Override @@ -220,13 +221,13 @@ public List asList(List defaultValue) { } @Override - public List asList(Function mapFunction) { - throw new Uncoercible(getClass().getSimpleName(), "List"); + public List asList(Function function) { + return Collections.emptyList(); } @Override - public List asList(Function mapFunction, List defaultValue) { - throw new Uncoercible(getClass().getSimpleName(), "List"); + public List asList(Function function, List list) { + return Collections.emptyList(); } @Override @@ -337,8 +338,8 @@ public Map asMap(Map defaultValue) { } @Override - public Map asMap(Function mapFunction, Map defaultValue) { - throw new Uncoercible(getClass().getSimpleName(), "Map"); + public Map asMap(Function function, Map map) { + return Collections.emptyMap(); } @Override @@ -382,8 +383,8 @@ public List get(String key, List defaultValue) { } @Override - public List get(String key, List defaultValue, Function mapFunc) { - return null; + public List get(String s, List list, Function function) { + return Collections.emptyList(); } @Override @@ -392,8 +393,8 @@ public Map get(String key, Map defaultValue) { } @Override - public Map get(String key, Map defaultValue, Function mapFunc) { - return null; + public Map get(String s, Map map, Function function) { + return Collections.emptyMap(); } @Override From e1bf231b7d3eb6188d5e265e01a58b99c79cae5b Mon Sep 17 00:00:00 2001 From: Spencer Perkins <95900100+SpecialThing44@users.noreply.github.com> Date: Tue, 19 Aug 2025 15:37:40 -0400 Subject: [PATCH 6/8] Apply suggestion from @jsoref Co-authored-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geequel-shell/src/main/java/org/neo4j/shell/log/NullLogger.java | 1 - 1 file changed, 1 deletion(-) diff --git a/geequel-shell/src/main/java/org/neo4j/shell/log/NullLogger.java b/geequel-shell/src/main/java/org/neo4j/shell/log/NullLogger.java index 1a0b8e4..bc9ae7c 100644 --- a/geequel-shell/src/main/java/org/neo4j/shell/log/NullLogger.java +++ b/geequel-shell/src/main/java/org/neo4j/shell/log/NullLogger.java @@ -56,7 +56,6 @@ public void debug( String message, Object... params ) @Override public void debug(String s, Throwable throwable) { - } @Override From 0a616645d70dff92221f52446c85bd6be92d7555 Mon Sep 17 00:00:00 2001 From: Spencer Perkins <95900100+SpecialThing44@users.noreply.github.com> Date: Tue, 19 Aug 2025 15:38:05 -0400 Subject: [PATCH 7/8] Apply suggestion from @jsoref Co-authored-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- .../test/java/org/neo4j/shell/state/BoltStateHandlerTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/geequel-shell/src/test/java/org/neo4j/shell/state/BoltStateHandlerTest.java b/geequel-shell/src/test/java/org/neo4j/shell/state/BoltStateHandlerTest.java index e8f2237..f826b27 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/state/BoltStateHandlerTest.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/state/BoltStateHandlerTest.java @@ -84,8 +84,8 @@ public Driver apply(String uri, AuthToken authToken, Config config) { return new FakeDriver() { @Override public Session session() { - return new FakeSession(); - } + return new FakeSession(); + } }; } }; From 1689ae7d4b447f7d27addc04d27da37c8c195bab Mon Sep 17 00:00:00 2001 From: Spencer Perkins <95900100+SpecialThing44@users.noreply.github.com> Date: Tue, 19 Aug 2025 15:38:22 -0400 Subject: [PATCH 8/8] Apply suggestion from @jsoref Co-authored-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- .../src/test/java/org/neo4j/shell/test/bolt/FakeDriver.java | 1 - 1 file changed, 1 deletion(-) diff --git a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeDriver.java b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeDriver.java index 1004374..3b6dc01 100644 --- a/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeDriver.java +++ b/geequel-shell/src/test/java/org/neo4j/shell/test/bolt/FakeDriver.java @@ -89,7 +89,6 @@ public TypeSystem defaultTypeSystem() { @Override public void verifyConnectivity() { - } @Override