/** * Copyright (c) 2002-2011 "Neo Technology," * Network Engine for Objects in Lund AB [http://neotechnology.com] * * This file is part of Neo4j. * * Neo4j is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.neo4j.release.it.std.exec; import org.junit.Test; import org.ops4j.io.FileUtils; import org.ops4j.pax.exam.options.MavenArtifactProvisionOption; import org.ops4j.pax.exam.options.ProvisionOption; import org.ops4j.pax.runner.platform.DefaultJavaRunner; import org.ops4j.pax.runner.platform.PlatformException; import java.io.File; import java.io.FilenameFilter; import java.net.MalformedURLException; import java.util.Arrays; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.neo4j.release.it.std.exec.HasItemEndingIn.hasItemEndingIn; import static org.ops4j.pax.exam.CoreOptions.mavenBundle; /** * Unit tests for the Provisioner. */ public class ProvisionerTest { @Test public void shouldCreateProvisioner() { Provisioner prover = new Provisioner(); assertThat(prover, notNullValue()); } @Test public void shouldCreateProvisionDirectory() { final String EXPECTED_DIRECTORY = "prove_dir"; Provisioner prover = new Provisioner(); prover.setProvisionDirectory( EXPECTED_DIRECTORY ); prover.provision(); File actualDirectory = new File(EXPECTED_DIRECTORY); assertTrue(actualDirectory.exists()); assertTrue(actualDirectory.isDirectory()); FileUtils.delete(actualDirectory); } @Test public void shouldProvisionMavenArtifact() throws MalformedURLException { final String EXPECTED_DIRECTORY = "prove_dir"; Provisioner prover = new Provisioner(); prover.setProvisionDirectory( EXPECTED_DIRECTORY ); prover.include("mvn:org.neo4j/neo4j-kernel/1.1", "neo4j-kernel.jar"); prover.provision(); File actualDirectory = new File(EXPECTED_DIRECTORY); String[] foundJars = actualDirectory.list( new FilenameFilter() { public boolean accept(File dir, String name) { return name.endsWith("jar"); } }); assertThat( foundJars.length, is ( equalTo(1))); FileUtils.delete(actualDirectory); } @Test public void shouldProvisionMavenArtifactWithARecognizableName() throws MalformedURLException { final String EXPECTED_DIRECTORY = "prove_dir"; Provisioner prover = new Provisioner(); prover.setProvisionDirectory( EXPECTED_DIRECTORY ); prover.include("mvn:org.neo4j/neo4j-kernel/1.1", "neo4j-kernel.jar"); prover.provision(); File actualDirectory = new File(EXPECTED_DIRECTORY); String[] foundJars = listJarsIn(actualDirectory); assertThat( foundJars.length, is ( equalTo(1))); assertThat( foundJars[0], containsString("neo4j-kernel")); FileUtils.delete(actualDirectory); } @Test public void shouldProvisionArtifactWithFluently() { Provisioner prover = new Provisioner(); } @Test public void shouldIncludeJarsInClasspath() throws MalformedURLException { final String EXPECTED_DIRECTORY = "prove_dir"; final String EXPECTED_JAR = "neo4j-kernel.jar"; Provisioner prover = new Provisioner(); prover.setProvisionDirectory( EXPECTED_DIRECTORY ); prover.include("mvn:org.neo4j/neo4j-kernel/1.1", EXPECTED_JAR); prover.provision(); assertThat( Arrays.asList(prover.getProvisionedClasspath()), hasItemEndingIn(EXPECTED_JAR)); File actualDirectory = new File(EXPECTED_DIRECTORY); FileUtils.delete(actualDirectory); } @Test public void shouldNotRequireArtifactsInClasspath() { final String EXPECTED_DIRECTORY = "prove_dir"; Provisioner prover = new Provisioner(); prover.setProvisionDirectory( EXPECTED_DIRECTORY ); assertThat( prover.getProvisionedClasspath(), is(notNullValue())); File actualDirectory = new File(EXPECTED_DIRECTORY); FileUtils.delete(actualDirectory); } @Test public void shouldIncludeTargetClassesInClasspath() { final String EXPECTED_DIRECTORY = "prove_dir"; Provisioner prover = new Provisioner(); prover.setProvisionDirectory( EXPECTED_DIRECTORY ); prover.includeTargetClasses(); assertThat( Arrays.asList(prover.getProvisionedClasspath()), hasItemEndingIn("classes")); File actualDirectory = new File(EXPECTED_DIRECTORY); FileUtils.delete(actualDirectory); } @Test public void shouldIncludeTargetTestClassesInClasspath() { final String EXPECTED_DIRECTORY = "prove_dir"; Provisioner prover = new Provisioner(); prover.setProvisionDirectory( EXPECTED_DIRECTORY ); prover.includeTargetTestClasses(); assertThat( Arrays.asList(prover.getProvisionedClasspath()), hasItemEndingIn("test-classes")); File actualDirectory = new File(EXPECTED_DIRECTORY); FileUtils.delete(actualDirectory); } @Test public void shouldProvisionClasspathForLocalApp() throws PlatformException { Provisioner prover = new Provisioner(); prover.includeTargetClasses(); prover.includeTargetTestClasses(); boolean waitForExit = true; DefaultJavaRunner runner = new DefaultJavaRunner( waitForExit ); String[] vmOptions = { "-server" }; String[] classpath = prover.getProvisionedClasspath(); String mainClass = "org.neo4j.release.it.std.exec.HelloWorldApp"; String[] programOptions = null; String javaHome = System.getProperty("java.home"); File workingDir = null; // new File("."); System.out.println(Arrays.toString(classpath)); runner.exec(vmOptions, classpath, mainClass, programOptions, javaHome, workingDir); } private String[] listJarsIn(File directory) { return directory.list( new FilenameFilter() { public boolean accept(File dir, String name) { return name.endsWith("jar"); } }); } }