/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.openjpa.tools.maven.test; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.InputStream; import java.io.InputStreamReader; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import org.apache.openjpa.enhance.PersistenceCapable; import org.apache.openjpa.tools.maven.testentity.TestEntity; import junit.framework.TestCase; public class ItDefaultSettingsTest extends TestCase { /** contains the directory where all generated results are placed */ private final static String TARGET_DIR = "target"; /** the file containing the generated SQL syntax */ private final static String SQL_FILE = "database.sql"; /** if the SQL generation has been successful, the following result should be in the SQL file */ private final static String VALID_SQL = "CREATE TABLE TestEntity (xint1 INTEGER NOT NULL, myEnum VARCHAR(20), " + "string1 VARCHAR(255), PRIMARY KEY (xint1));"; private final static String TEST_ENTITY_CLASS = "org.apache.openjpa.tools.maven.testentity.TestEntity"; /** the file containing the generated schema XML */ private final static String SCHEMA_FILE = "schema.xml"; /** the name of the schema XML file which should be taken as test reference */ private final static String REFERENCE_SCHEMA_XML = "reference_schema.orig_xml"; /** * check if the generated classes have been enhanced. * @throws Exception */ public void testEnhancement() throws Exception { Class tec = Thread.currentThread().getContextClassLoader().loadClass( TEST_ENTITY_CLASS ); boolean isPersistenceCapable = false; Class[] interfaces = tec.getInterfaces(); for ( int i = 0; i < interfaces.length; i++ ) { if ( interfaces[ i ].getName().equals( PersistenceCapable.class.getName() ) ) { isPersistenceCapable = true; break; } } assertTrue( "the class " + TEST_ENTITY_CLASS + " does not implement PersistenceCapable!", isPersistenceCapable ); } /** * check if the generated SQL script is correct. * @throws Exception */ public void testSqlGeneration() throws Exception { File sqlFile = new File( TARGET_DIR, SQL_FILE ); BufferedReader in = new BufferedReader( new FileReader( sqlFile ) ); String sqlIn = in.readLine(); assertEquals( VALID_SQL, sqlIn ); } /** * check if the generated schema.xml is correct. * @throws Exception */ public void testSchemaGeneration() throws Exception { File sqlFile = new File( TARGET_DIR, SCHEMA_FILE ); BufferedReader schemaGen = new BufferedReader( new FileReader( sqlFile ) ); InputStream schemaRefIs = Thread.currentThread().getContextClassLoader().getResourceAsStream( REFERENCE_SCHEMA_XML ); BufferedReader schemaRef = new BufferedReader( new InputStreamReader( schemaRefIs ) ); String refLine; while ( (refLine = schemaRef.readLine()) != null) { String genLine = schemaGen.readLine(); assertEquals("generated schema.xml differs from expected one!", refLine, genLine ); } } /** * This test will execute a few statements to the database * @throws Exception */ public void testPersistence() throws Exception { EntityManagerFactory emf = Persistence.createEntityManagerFactory("TestUnit"); EntityManager em = emf.createEntityManager(); try { em.getTransaction().begin(); TestEntity te = new TestEntity(1, "testentry"); em.getTransaction().commit(); } finally { if (em.getTransaction().isActive()) { em.getTransaction().rollback(); } em.close(); } } }