# 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=report
# 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

# 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}/ojdbc6.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
