# Testing environment properties.

# Link to dependencies not in SVN, assumes default location, if you store elsewhere you need to edit these.
extensions.depend.dir=../../../extension.lib.external
extensions.depend.dir.oracle=../../../extension.oracle.lib.external

# Enter Database Connection Info
jdbc.driver.jar=${extensions.depend.dir}/mysql-connector-java-5.0.7-bin.jar
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost/user
db.user=user
db.pwd=password
db.platform=org.eclipse.persistence.platform.database.MySQLPlatform

# Composite Persistence Unit tests require 3 databases - one for each composite member.
# The first member always uses the database defined by db.* properties.
# By default the same data base is also used by second and third members, too.
# That allows to run the tests with only one data base available.
#
# But Composite Persistence Unit is designed to work with members using different data bases.
# For members 2 and 3 to use connection properties specified in their persistence.xml files, specify
# single.db=false
#
# To override connection infos for members 2 and 3 specify db2.* and db3.* properties:
# jdbc2.driver.jar=..
# db2.driver=..
# db2.url=...
# db2.user=...
# db2.pwd=...
# db2.platform=...
#
# jdbc3.driver.jar=..
# db3.driver=..
# db3.url=...
# db3.user=...
# db3.pwd=...
# db3.platform=...

# Enter Database Connection Info
#jdbc.driver.jar=${extensions.depend.dir}/mysql-connector-java-5.0.7-bin.jar
#db.driver=com.mysql.jdbc.Driver
#db.url=jdbc:mysql://localhost/user
#db.user=user
#db.pwd=password
#db.platform=org.eclipse.persistence.platform.database.MySQLPlatform

## Symfoware
#jdbc.driver.jar=${extensions.depend.dir}/fjsymjdbc4.jar
#db.driver=com.fujitsu.symfoware.jdbc.SYMDriver
#db.url=jdbc:symford://symfodb:56001/TESTDB01;ctuneparam='CLI_ISOLATION_WAIT=(REJECT)'
#db.user=symfouser
#db.pwd=symfopwd
#db.platform=org.eclipse.persistence.platform.database.SymfowarePlatform
#additional.jvmargs=-Declipselink.test.toggle-fast-table-creator=true

# toplink.jar=${extensions.depend.dir.oracle}/toplink.jar
# toplink-essentials.jar=${extensions.depend.dir.oracle}/toplink-essentials.jar
# toplink-essentials-agent.jar=${extensions.depend.dir.oracle}/toplink-essentials-agent.jar
# hibernate.dir=../../../extension.hibernate.lib.external/
# openjpa.dir=../../../extension.openjpa.lib.external/
# coherence.dir=../../../extension.coherence.lib.external/

# Logging option for debugging.
logging.level=info
# logging.level=finest
# logging.level=off

# Weaving agents:
# 1. EclipseLink agent: test.agent=-javaagent:${eclipselink.jar.run}
# 2. Default agent: test.agent=-Dignore
test.agent=-javaagent:${eclipselink.jar.run}

# Weaving types:
# 1. Dynamic: test.weaving=-Dignore
# 2. No weaving: test.weaving=-DTEST_NO_WEAVING=true
test.weaving=-Dignore

# Dynamic weaving settings
# 1. eclipselink.weaving.internal: default value is 'true'
# 2. eclipselink.weaving.lazy: default value is 'true'
# 3. eclipselink.weaving.eager: default value is 'false'
# 4. eclipselink.weaving.changetracking: default value is 'true'
# 5. eclipselink.weaving.fetchgroups: default value is 'true'
# To test default settigs, use 'test.weaving.option=-Dignore'
# To test non default settings, switch one of these settings to non-default values,
# for example, use 'test.weaving.option=-Declipselink.weaving.internal=false'.
# Note: Must set Weaving types like "test.weaving=-DTEST_NO_WEAVING=true" when testing non default settings
test.weaving.option=-Dignore

# Server test weaving types:
# 1. Dynamic: server.weaving=true
# 2. Static weaveing: server.weaving=static
# 3. No weaving: server.weaving=false
server.weaving=true

# Metadata Cache Testing Properties
#run.metadata.cache.test.suite=true
#use.project.cache=true

# Set value to "false" for non-JTA Datasource, and "true" for JTA Datasource (Need to re-start the server if this value been changed)
is.JTA=true

# Test class to be run.
test.class=org.eclipse.persistence.testing.tests.jpa.FullRegressionTestSuite
# test.class=org.eclipse.persistence.testing.tests.jpa.advanced.EntityManagerJUnitTestSuite
# test.class=org.eclipse.persistence.testing.tests.jpa.AllCMP3TestRunModel

# Test runner properties.
run.dir=run
report.dir=reports
# This is relative to the run directory.
eclipselink.jar.run=../../../eclipselink.jar

# Server properties
# Valid values of server.name are weblogic, websphere, jboss, oc4j, glassfish ..., valid value of server.version will be 2 or 3 for glassfish...
# For jboss, server.version=eap means Enterprise Application Platform, if you don't put value for server.version, that means the default community version
server.name=weblogic
#server.version=3

# Set value to true if you want to validate container managed JPA using jndi lookup, default is false
ejb.lookup=false

# A property specifying if PromptTestRunner should save the test results to the database
should.save.results=false

# Stop the build process if a test fails (errors are considered failures as well).
# Value of this property is passed as haltonfailure attribute to junit task in run-test.
test.haltonfailure=off

# The baseline version that the performance tests will compare this version with.
# By default, it is the version that the last success runs were against.
# To this version as a baseline, you can specify a non-existing baseline version and run the performance tests.
# performance.baseline.version=1.0_:SNAPSHOT_-_20080402

###############################
# DB Connection Samples
###############################

## Oracle DB
# jdbc.driver.jar=${extensions.depend.dir.oracle}/ojdbc7.jar
# db.driver=oracle.jdbc.OracleDriver
# db.url=jdbc:oracle:thin:@localhost:1521:orcl
# db.user=scott
# db.pwd=tiger
# db.platform=org.eclipse.persistence.platform.database.oracle.Oracle11Platform
## Oracle proxy authentication needs to be setup to run proxy authentication tests
# oracle.proxy.user=${db.user}_PROXY
# oracle.proxy.authentication.is.setup=true

## MySQL
# jdbc.driver.jar=${extensions.depend.dir}/mysql-connector-java-5.0.7-bin.jar
# db.driver=com.mysql.jdbc.Driver
# db.url=jdbc:mysql://localhost/mysql
# db.user=user
# db.pwd=password
# db.platform=org.eclipse.persistence.platform.database.MySQLPlatform

## SQL Server
#jdbc.driver.jar=${extensions.depend.dir}/sqljdbc4.jar
#db.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
#db.url=jdbc:sqlserver://localhost
#db.user=user
#db.pwd=password
#db.platform=org.eclipse.persistence.platform.database.SQLServerPlatform

## Sybase
#jdbc.driver.jar=${extensions.depend.dir}/jconn3.jar
#db.driver=com.sybase.jdbc3.jdbc.SybDriver
#db.url=jdbc:sybase:Tds:localhost:5000/ECLIPSELINK
#db.user=user
#db.pwd=password
#db.platform=org.eclipse.persistence.platform.database.SybasePlatform

## DB2
#jdbc.driver.jar=${extensions.depend.dir}/db2jcc_9.jar:${extensions.depend.dir}/db2jcc_license_cu_9.jar
#db.driver=com.ibm.db2.jcc.DB2Driver
#db.url=jdbc:db2://localhost:50000/ECLIPSELINK
#db.user=user
#db.pwd=password
#db.platform=org.eclipse.persistence.platform.database.DB2Platform

## TimesTen
#jdbc.driver.jar=${extensions.depend.dir.oracle}/tt7_classes16.jar:${extensions.depend.dir.oracle}/tt7_orai18n.jar
#db.driver=com.timesten.jdbc.TimesTenDriver
#db.url=jdbc:timesten:client:tt7qa_ttmode
#db.user=user
#db.pwd=password
#db.platform=org.eclipse.persistence.platform.database.TimesTen7Platform

## Derby
#jdbc.driver.jar=${extensions.depend.dir}/derby.jar:${extensions.depend.dir}/derbyclient.jar
#db.driver=org.apache.derby.jdbc.ClientXADataSource
#db.url=jdbc:derby://localhost:1527/ECLIPSELINK
#db.user=user
#db.pwd=password
#db.platform=org.eclipse.persistence.platform.database.DerbyPlatform
