Skip to content

Commit c0b3950

Browse files
author
Zhen Li
authored
Merge pull request #336 from zhenlineo/1.2-boltkit
Move to boltkit
2 parents 5f0f9fa + 966fd38 commit c0b3950

File tree

11 files changed

+175
-129
lines changed

11 files changed

+175
-129
lines changed

driver/src/test/java/org/neo4j/driver/v1/DriverCloseIT.java renamed to driver/src/test/java/org/neo4j/driver/v1/integration/DriverCloseIT.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
* See the License for the specific language governing permissions and
1717
* limitations under the License.
1818
*/
19-
package org.neo4j.driver.v1;
19+
package org.neo4j.driver.v1.integration;
2020

2121
import org.junit.After;
2222
import org.junit.Before;
@@ -29,6 +29,12 @@
2929
import java.util.logging.Level;
3030

3131
import org.neo4j.driver.internal.logging.ConsoleLogging;
32+
import org.neo4j.driver.v1.AccessMode;
33+
import org.neo4j.driver.v1.Config;
34+
import org.neo4j.driver.v1.Driver;
35+
import org.neo4j.driver.v1.GraphDatabase;
36+
import org.neo4j.driver.v1.Record;
37+
import org.neo4j.driver.v1.Session;
3238
import org.neo4j.driver.v1.util.StubServer;
3339
import org.neo4j.driver.v1.util.TestNeo4j;
3440

driver/src/test/java/org/neo4j/driver/v1/integration/TLSSocketChannelIT.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ public void shouldPerformTLSHandshakeWithTheSameTrustedServerCert() throws Throw
286286
channel.connect( address.toSocketAddress() );
287287

288288
// When
289-
SecurityPlan securityPlan = SecurityPlan.forCustomCASignedCertificates( Neo4jSettings.DEFAULT_TLS_CERT_FILE );
289+
SecurityPlan securityPlan = SecurityPlan.forCustomCASignedCertificates( neo4j.tlsCertFile() );
290290
TLSSocketChannel sslChannel = TLSSocketChannel.create( address, securityPlan, channel, logger );
291291
sslChannel.close();
292292

@@ -322,7 +322,7 @@ public void shouldWarnIfUsingDeprecatedTLSOption() throws Throwable
322322

323323
Config config = Config.build()
324324
.withEncryptionLevel( Config.EncryptionLevel.REQUIRED )
325-
.withTrustStrategy( Config.TrustStrategy.trustSignedBy( Neo4jSettings.DEFAULT_TLS_CERT_FILE ) )
325+
.withTrustStrategy( Config.TrustStrategy.trustSignedBy( neo4j.tlsCertFile() ) )
326326
.withLogging( logging )
327327
.toConfig();
328328

driver/src/test/java/org/neo4j/driver/v1/tck/DriverSecurityComplianceSteps.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
import org.neo4j.driver.v1.util.CertificateToolTest.CertificateSigningRequestGenerator;
3838
import org.neo4j.driver.v1.util.CertificateToolTest.SelfSignedCertificateGenerator;
3939
import org.neo4j.driver.v1.util.Neo4jRunner;
40-
import org.neo4j.driver.v1.util.Neo4jSettings;
4140

4241
import static java.io.File.createTempFile;
4342
import static junit.framework.Assert.assertEquals;
@@ -50,6 +49,8 @@
5049
import static org.neo4j.driver.v1.Config.TrustStrategy.trustOnFirstUse;
5150
import static org.neo4j.driver.v1.tck.DriverComplianceIT.neo4j;
5251
import static org.neo4j.driver.v1.util.CertificateToolTest.generateSelfSignedCertificate;
52+
import static org.neo4j.driver.v1.util.Neo4jRunner.NEO4J_HOME;
53+
import static org.neo4j.driver.v1.util.Neo4jSettings.DEFAULT_TLS_CERT_PATH;
5354

5455
public class DriverSecurityComplianceSteps
5556
{
@@ -226,7 +227,9 @@ public void aRunningNeo4jDatabaseUsingThatExactTrustedCertificate()
226227
driver = GraphDatabase.driver(
227228
Neo4jRunner.DEFAULT_URI,
228229
Config.build().withEncryptionLevel( EncryptionLevel.REQUIRED )
229-
.withTrustStrategy( trustCustomCertificateSignedBy( Neo4jSettings.DEFAULT_TLS_CERT_FILE ) ).toConfig() );
230+
.withTrustStrategy( trustCustomCertificateSignedBy(
231+
new File( NEO4J_HOME, DEFAULT_TLS_CERT_PATH ) ) )
232+
.toConfig() );
230233
}
231234

232235
// invalid cert

driver/src/test/java/org/neo4j/driver/v1/util/Neo4jRunner.java

Lines changed: 29 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,18 @@
2323
import java.net.StandardSocketOptions;
2424
import java.net.URI;
2525
import java.nio.channels.SocketChannel;
26+
import java.util.ArrayList;
27+
import java.util.List;
2628
import java.util.Map;
2729

2830
import org.neo4j.driver.internal.net.BoltServerAddress;
2931
import org.neo4j.driver.v1.Driver;
3032
import org.neo4j.driver.v1.GraphDatabase;
3133

34+
import static java.util.Arrays.asList;
3235
import static org.neo4j.driver.v1.ConfigTest.deleteDefaultKnownCertFileIfExists;
3336
import static org.neo4j.driver.v1.util.FileTools.updateProperties;
37+
import static org.neo4j.driver.v1.util.cc.CommandLineUtil.executeCommand;
3438

3539
/**
3640
* This class wraps the neo4j stand-alone jar in some code to help pulling it in from a remote URL and then launching
@@ -42,15 +46,15 @@ public class Neo4jRunner
4246

4347
private static final boolean debug = Boolean.getBoolean( "neo4j.runner.debug" );
4448

45-
public static final String NEORUN_START_ARGS = System.getProperty( "neorun.start.args" );
49+
private static final String DEFAULT_NEOCTRL_ARGS = "-e 3.1.2";
50+
public static final String NEOCTRL_ARGS = System.getProperty( "neoctrl.args", DEFAULT_NEOCTRL_ARGS );
4651
public static final URI DEFAULT_URI = URI.create( "bolt://localhost:7687" );
4752
public static final BoltServerAddress DEFAULT_ADDRESS = BoltServerAddress.from( DEFAULT_URI );
4853
private Driver driver;
4954
private Neo4jSettings currentSettings = Neo4jSettings.DEFAULT_SETTINGS;
5055

51-
public static final String NEO4J_HOME = new File("../target/neo4j/neo4jhome").getAbsolutePath();
52-
private static final String NEORUN_PATH = new File("../neokit/neorun.py").getAbsolutePath();
53-
private static final String NEO4J_CONF = new File( NEO4J_HOME, "conf/neo4j.conf" ).getAbsolutePath();
56+
private static final String NEO4J_DIR = new File( "../target/neo4j" ).getAbsolutePath();
57+
public static String NEO4J_HOME;
5458

5559
/** Global runner controlling a single server, used to avoid having to restart the server between tests */
5660
public static synchronized Neo4jRunner getOrCreateGlobalRunner() throws IOException
@@ -75,7 +79,7 @@ private Neo4jRunner() throws IOException
7579
}
7680
}
7781

78-
public void ensureRunning(Neo4jSettings neo4jSettings) throws IOException, InterruptedException
82+
public void ensureRunning( Neo4jSettings neo4jSettings ) throws IOException, InterruptedException
7983
{
8084
ServerStatus status = serverStatus();
8185
switch( status )
@@ -99,16 +103,27 @@ public Driver driver()
99103
return driver;
100104
}
101105

102-
private void startNeo4j() throws IOException
106+
private void installNeo4j() throws IOException
103107
{
104108
// this is required for windows as python scripts cannot delete the file when it is used by driver tests
105109
deleteDefaultKnownCertFileIfExists();
106110

107-
int processStatus = runCommand( "python", NEORUN_PATH, "--start=" + NEO4J_HOME );
108-
if (processStatus != 0) // not success
109-
{
110-
throw new IOException( "Failed to start neo4j server." );
111-
}
111+
List<String> commands = new ArrayList<>();
112+
commands.add( "neoctrl-install" );
113+
String[] split = NEOCTRL_ARGS.trim().split( "\\s+" );
114+
commands.addAll( asList( split ) );
115+
commands.add( NEO4J_DIR );
116+
117+
NEO4J_HOME = executeCommand( commands ).trim();
118+
119+
}
120+
121+
private void startNeo4j() throws IOException
122+
{
123+
installNeo4j();
124+
updateServerSettingsFile();
125+
executeCommand( "neoctrl-create-user", NEO4J_HOME, "neo4j", "neo4j" );
126+
executeCommand( "neoctrl-start", NEO4J_HOME );
112127
}
113128

114129
public synchronized void stopNeo4j() throws IOException
@@ -123,11 +138,7 @@ public synchronized void stopNeo4j() throws IOException
123138
driver = null;
124139
}
125140

126-
int processStatus = runCommand( "python", NEORUN_PATH, "--stop=" + NEO4J_HOME );
127-
if( processStatus != 0 )
128-
{
129-
throw new IOException( "Failed to stop neo4j server." );
130-
}
141+
executeCommand( "neoctrl-stop", NEO4J_HOME );
131142
}
132143

133144
public void forceToRestart() throws IOException
@@ -150,42 +161,17 @@ public void restartNeo4j() throws IOException
150161
* @param neo4jSettings
151162
* @throws IOException
152163
*/
153-
public void restartNeo4j(Neo4jSettings neo4jSettings) throws IOException
164+
public void restartNeo4j( Neo4jSettings neo4jSettings ) throws IOException
154165
{
155166
if( updateServerSettings( neo4jSettings ) ) // needs to update server setting files
156167
{
157168
forceToRestart();
158169
}
159170
}
160171

161-
@SuppressWarnings("LoopStatementThatDoesntLoop")
162-
private int runCommand( String... cmd ) throws IOException
163-
{
164-
ProcessBuilder pb = new ProcessBuilder().inheritIO();
165-
ProcessEnvConfigurator.configure( pb );
166-
if( NEORUN_START_ARGS != null )
167-
{
168-
// overwrite the env var in the sub process if the system property is specified
169-
pb.environment().put( "NEORUN_START_ARGS", NEORUN_START_ARGS );
170-
}
171-
Process process = pb.command( cmd ).start();
172-
while (true)
173-
{
174-
try
175-
{
176-
return process.waitFor();
177-
}
178-
catch ( InterruptedException e )
179-
{
180-
Thread.interrupted();
181-
}
182-
}
183-
}
184-
185172
private enum ServerStatus
186173
{
187174
ONLINE, OFFLINE
188-
189175
}
190176

191177
private ServerStatus serverStatus()
@@ -231,7 +217,7 @@ private void updateServerSettingsFile()
231217
return;
232218
}
233219

234-
File oldFile = new File( NEO4J_CONF );
220+
File oldFile = new File( NEO4J_HOME, "conf/neo4j.conf" );
235221
try
236222
{
237223
debug( "Changing server properties file (for next start): " + oldFile.getCanonicalPath() );
@@ -261,7 +247,6 @@ public void run()
261247
{
262248
debug("Starting shutdown hook");
263249
stopNeo4j();
264-
updateServerSettings( Neo4jSettings.TEST_SETTINGS );
265250
debug("Finished shutdown hook");
266251
}
267252
catch ( Exception e )

driver/src/test/java/org/neo4j/driver/v1/util/Neo4jSettings.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
*/
1919
package org.neo4j.driver.v1.util;
2020

21-
import java.io.File;
2221
import java.util.Collections;
2322
import java.util.HashMap;
2423
import java.util.HashSet;
@@ -36,12 +35,10 @@ public class Neo4jSettings
3635

3736
private static final String DEFAULT_IMPORT_DIR = "import";
3837
private static final String DEFAULT_CERT_DIR = "certificates";
39-
private static final String DEFAULT_TLS_CERT_PATH = DEFAULT_CERT_DIR + "/neo4j.cert";
40-
private static final String DEFAULT_TLS_KEY_PATH = DEFAULT_CERT_DIR + "/neo4j.key";
38+
public static final String DEFAULT_TLS_CERT_PATH = DEFAULT_CERT_DIR + "/neo4j.cert";
39+
public static final String DEFAULT_TLS_KEY_PATH = DEFAULT_CERT_DIR + "/neo4j.key";
4140

4241
public static final String DEFAULT_DATA_DIR = "data";
43-
public static final File DEFAULT_TLS_KEY_FILE = new File( Neo4jRunner.NEO4J_HOME, DEFAULT_TLS_KEY_PATH );
44-
public static final File DEFAULT_TLS_CERT_FILE = new File( Neo4jRunner.NEO4J_HOME, DEFAULT_TLS_CERT_PATH );
4542

4643

4744
private final Map<String, String> settings;

driver/src/test/java/org/neo4j/driver/v1/util/TestNeo4j.java

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@
3232
import org.neo4j.driver.v1.Driver;
3333
import org.neo4j.driver.v1.Session;
3434

35+
import static org.neo4j.driver.v1.util.Neo4jRunner.*;
36+
import static org.neo4j.driver.v1.util.Neo4jSettings.DEFAULT_TLS_CERT_PATH;
37+
import static org.neo4j.driver.v1.util.Neo4jSettings.DEFAULT_TLS_KEY_PATH;
38+
3539
public class TestNeo4j implements TestRule
3640
{
3741
public static final String TEST_RESOURCE_FOLDER_PATH = "src/test/resources";
@@ -56,7 +60,7 @@ public Statement apply( final Statement base, final Description description )
5660
@Override
5761
public void evaluate() throws Throwable
5862
{
59-
runner = Neo4jRunner.getOrCreateGlobalRunner();
63+
runner = getOrCreateGlobalRunner();
6064
runner.ensureRunning( settings );
6165
try ( Session session = driver().session() )
6266
{
@@ -100,17 +104,17 @@ public URL putTmpFile( String prefix, String suffix, String contents ) throws IO
100104

101105
public URI uri()
102106
{
103-
return Neo4jRunner.DEFAULT_URI;
107+
return DEFAULT_URI;
104108
}
105109

106110
public BoltServerAddress address()
107111
{
108-
return Neo4jRunner.DEFAULT_ADDRESS;
112+
return DEFAULT_ADDRESS;
109113
}
110114

111115
static void clearDatabaseContents( Session session, String reason )
112116
{
113-
Neo4jRunner.debug( "Clearing database contents for: %s", reason );
117+
debug( "Clearing database contents for: %s", reason );
114118

115119
// Note - this hangs for extended periods some times, because there are tests that leave sessions running.
116120
// Thus, we need to wait for open sessions and transactions to time out before this will go through.
@@ -120,14 +124,24 @@ static void clearDatabaseContents( Session session, String reason )
120124

121125
public void updateEncryptionKeyAndCert( File key, File cert ) throws Exception
122126
{
123-
FileTools.copyFile( key, Neo4jSettings.DEFAULT_TLS_KEY_FILE );
124-
FileTools.copyFile( cert, Neo4jSettings.DEFAULT_TLS_CERT_FILE );
127+
FileTools.copyFile( key, tlsKeyFile() );
128+
FileTools.copyFile( cert, tlsCertFile() );
125129
runner.forceToRestart(); // needs to force to restart as no configuration changed
126130
}
127131

132+
public File tlsCertFile()
133+
{
134+
return new File( NEO4J_HOME, DEFAULT_TLS_CERT_PATH );
135+
}
136+
137+
public File tlsKeyFile()
138+
{
139+
return new File( NEO4J_HOME, DEFAULT_TLS_KEY_PATH );
140+
}
141+
128142
public void ensureProcedures( String jarName ) throws IOException
129143
{
130-
File procedureJar = new File( Neo4jRunner.NEO4J_HOME, "plugins/" + jarName );
144+
File procedureJar = new File( NEO4J_HOME, "plugins/" + jarName );
131145
if( !procedureJar.exists() )
132146
{
133147
FileTools.copyFile( new File( TEST_RESOURCE_FOLDER_PATH, jarName ), procedureJar );

driver/src/test/java/org/neo4j/driver/v1/util/cc/ClusterControl.java

Lines changed: 2 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,8 @@
1818
*/
1919
package org.neo4j.driver.v1.util.cc;
2020

21-
import java.io.BufferedReader;
22-
import java.io.IOException;
23-
import java.io.InputStream;
24-
import java.io.InputStreamReader;
2521
import java.nio.file.Path;
26-
import java.util.Arrays;
27-
28-
import org.neo4j.driver.v1.util.ProcessEnvConfigurator;
29-
30-
import static java.lang.System.lineSeparator;
22+
import static org.neo4j.driver.v1.util.cc.CommandLineUtil.executeCommand;
3123

3224
final class ClusterControl
3325
{
@@ -42,7 +34,7 @@ static boolean boltKitClusterAvailable()
4234
executeCommand( "neoctrl-cluster", "--help" );
4335
return true;
4436
}
45-
catch ( ClusterControlException e )
37+
catch ( CommandLineException e )
4638
{
4739
return false;
4840
}
@@ -87,55 +79,4 @@ static void killClusterMember( Path path )
8779
executeCommand( "neoctrl-stop", "--kill", path.toString() );
8880
}
8981

90-
private static String executeCommand( String... command )
91-
{
92-
try
93-
{
94-
ProcessBuilder processBuilder = new ProcessBuilder().command( command );
95-
ProcessEnvConfigurator.configure( processBuilder );
96-
return executeAndGetStdOut( processBuilder );
97-
}
98-
catch ( IOException e )
99-
{
100-
throw new ClusterControlException( "Error running command " + Arrays.toString( command ), e );
101-
}
102-
catch ( InterruptedException e )
103-
{
104-
Thread.currentThread().interrupt();
105-
throw new ClusterControlException( "Interrupted while waiting for command " +
106-
Arrays.toString( command ), e );
107-
}
108-
}
109-
110-
private static String executeAndGetStdOut( ProcessBuilder processBuilder )
111-
throws IOException, InterruptedException
112-
{
113-
Process process = processBuilder.start();
114-
int exitCode = process.waitFor();
115-
String stdOut = asString( process.getInputStream() );
116-
String stdErr = asString( process.getErrorStream() );
117-
if ( exitCode != 0 )
118-
{
119-
throw new ClusterControlException( "Non-zero exit code\nSTDOUT:\n" + stdOut + "\nSTDERR:\n" + stdErr );
120-
}
121-
return stdOut;
122-
}
123-
124-
private static String asString( InputStream input )
125-
{
126-
StringBuilder result = new StringBuilder();
127-
try ( BufferedReader reader = new BufferedReader( new InputStreamReader( input ) ) )
128-
{
129-
String line;
130-
while ( (line = reader.readLine()) != null )
131-
{
132-
result.append( line ).append( lineSeparator() );
133-
}
134-
}
135-
catch ( IOException e )
136-
{
137-
throw new ClusterControlException( "Unable to read from stream", e );
138-
}
139-
return result.toString();
140-
}
14182
}

0 commit comments

Comments
 (0)