/** * 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.neometa.exam; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.junit.Assert.assertThat; import static org.ops4j.pax.exam.CoreOptions.mavenBundle; import static org.ops4j.pax.exam.CoreOptions.wrappedBundle; import static org.ops4j.pax.exam.CoreOptions.mavenConfiguration; import static org.ops4j.pax.exam.CoreOptions.options; import static org.ops4j.pax.exam.CoreOptions.provision; import static org.ops4j.pax.exam.container.def.PaxRunnerOptions.cleanCaches; import static org.ops4j.pax.exam.container.def.PaxRunnerOptions.logProfile; import static org.ops4j.pax.exam.container.def.PaxRunnerOptions.rawPaxRunnerOption; import static org.ops4j.pax.exam.container.def.PaxRunnerOptions.repository; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.Transaction; import org.neo4j.index.IndexService; import org.neo4j.index.lucene.LuceneIndexService; import org.neo4j.kernel.EmbeddedGraphDatabase; import org.neo4j.meta.model.MetaModel; import org.neo4j.meta.model.MetaModelClass; import org.neo4j.meta.model.MetaModelImpl; import org.neo4j.meta.model.MetaModelNamespace; import org.neo4j.meta.model.MetaModelProperty; import org.ops4j.pax.exam.Inject; import org.ops4j.pax.exam.Option; import org.ops4j.pax.exam.junit.Configuration; import org.ops4j.pax.exam.junit.JUnit4TestRunner; import org.osgi.framework.BundleContext; /** * A pax-exam integration test for using the neo-meta bundle in an OSGi * environment. * */ @RunWith( JUnit4TestRunner.class ) public class MetastructureTest { @Inject private BundleContext bundleContext; @Configuration public static Option[] config() { return options( logProfile(), cleanCaches(), rawPaxRunnerOption( "log", "debug" ), mavenBundle().artifactId( "geronimo-jta_1.1_spec" ).groupId( "org.apache.geronimo.specs" ).version( "1.1.1" ), mavenBundle().artifactId( "neo4j-kernel" ).groupId( "org.neo4j" ).versionAsInProject(), mavenBundle().artifactId( "neo4j-index" ).groupId( "org.neo4j" ).versionAsInProject(), mavenBundle().artifactId( "neo4j-shell" ).groupId( "org.neo4j" ).versionAsInProject(), mavenBundle().artifactId( "neo4j-utils" ).groupId( "org.neo4j" ).versionAsInProject(), mavenBundle().artifactId( "org.apache.servicemix.bundles.lucene" ) .groupId( "org.apache.servicemix.bundles").versionAsInProject(), mavenBundle().artifactId( "neo4j-meta-model" ).groupId( "org.neo4j" ).versionAsInProject(), wrappedBundle(mavenBundle().artifactId( "jline" ).groupId( "jline" ) .versionAsInProject()), repository("http://m2.neo4j.org") ); } public GraphDatabaseService neo4j; @Before public void setupNeo() { neo4j = new EmbeddedGraphDatabase( "target/var/neo4j" ); } @After public void shutdownNeo() { neo4j.shutdown(); } /** * A sanity check to make sure that a valid OSGi context exists. */ @Test public void shouldHaveABundleContext() { assertThat( bundleContext, is( notNullValue() ) ); } /** * A simple test to exercise the meta-model api. */ @Test public void shouldCreateMetaModel() { IndexService index = new LuceneIndexService( neo4j ); MetaModel meta = new MetaModelImpl( neo4j, index ); Transaction tx = neo4j.beginTx(); try { MetaModelNamespace namespace = meta.getGlobalNamespace(); // Create a class, use ", true" for "create it if it doesn't exist". MetaModelClass personClass = namespace.getMetaClass( "http://metaexample.org/meta#Person", true ); // Create a property in a similar way. MetaModelProperty nameProperty = namespace.getMetaProperty( "http://metaexample.org/meta#name", true ); // Tell the meta model that persons can have name properties. personClass.getDirectProperties().add( nameProperty ); tx.success(); } catch ( Exception e ) { tx.failure(); } finally { tx.finish(); } } }