<!--
    Copyright (c) 2017,2023 IBM Corporation and others.
    All rights reserved. This program and the accompanying materials
    are made available under the terms of the Eclipse Public License 2.0
    which accompanies this distribution, and is available at
    http://www.eclipse.org/legal/epl-2.0/
    
    SPDX-License-Identifier: EPL-2.0
   
    Contributors:
        IBM Corporation - initial API and implementation
 -->
<server>
  <include location="../fatTestPorts.xml" />

  <featureManager>
    <feature>componenttest-1.0</feature>
    <feature>restConnector-2.0</feature>
    <feature>jdbc-4.2</feature>
    <feature>mpOpenApi-1.0</feature>
  </featureManager>

  <variable name="onError" value="FAIL"/>

  <keyStore id="defaultKeyStore" password="Liberty"/>
  
  <basicRegistry>
    <user name="adminuser" password="adminpwd" />
    <user name="reader" password="readerpwd" />
    <user name="user" password="userpwd" />
  </basicRegistry>
  <administrator-role>
    <user>adminuser</user>
  </administrator-role>
  <reader-role>
    <user>reader</user>
  </reader-role>
  
  <library id="Derby">
    <file name="${shared.resource.dir}/derby/derby.jar"/>
  </library>
  
  <variable name="DB_USER" value="dbuser"/>
  <variable name="DB_PASS" value="dbpass"/>

  <dataSource id="DataSourceWithoutJDBCDriver" jndiName="jdbc/withoutJDBCDriver" connectionSharing="MatchCurrentState" transactional="false">
    <containerAuthData id="dbuser-auth" user="dbuser" password="{xor}Oz0vPiws"/>
   	<properties.derby.embedded databaseName="memory:withoutJDBCDriver"/>
  </dataSource>

  <dataSource id="DefaultDataSource" isolationLevel="TRANSACTION_READ_COMMITTED">
    <jdbcDriver libraryRef="Derby"/>
    <!-- user/password settings defined in bootstrap.properties -->
   	<properties.derby.embedded databaseName="memory:defaultdb" createDatabase="create" 
   	                           user="${DB_USER}" password="${DB_PASS}"/>
  </dataSource>

  <dataSource id="jdbc/nonexistentdb" jndiName="${id}">
    <connectionManager id="NestedConPool" agedTimeout="1h2m3s" connectionTimeout="0s" maxIdleTime="40m" reapTime="2m30s"/>
    <jdbcDriver libraryRef="Derby"/>
   	<properties.derby.embedded databaseName="memory:doesNotExist"/>
  </dataSource>

  <transaction enableHADBPeerLocking="false">
    <dataSource transactional="false" containerAuthDataRef="auth1">
      <connectionManager maxPoolSize="5" connectionTimeout="0s"/>
      <jdbcDriver libraryRef="Derby"/>
   	  <properties.derby.embedded databaseName="memory:recoverydb" createDatabase="create"/>
    </dataSource>
  </transaction>

  <!-- ejbLite and batch features are intentionally disabled -->
  <databaseStore id="unavailableDBStore">
    <dataSource id="unavailableDS">
      <jdbcDriver libraryRef="Derby"/>
      <properties.derby.embedded databaseName="memory:unavailabledb"/>
    </dataSource>
  </databaseStore>

  <!-- mongo feature intentionally disabled, so it doesn't matter that we are using an incorrect library -->
  <mongo id="mongo" libraryRef="DerbyLib"/>
  <mongoDB id="MongoDBNotEnabled" jndiName="mongo/db" mongoRef="mongo" databaseName="db-test" />
  
  <authData id="auth1" user="dbuser" password="dbpass"/>
  
  <authData id="auth2" user="dbuser" password="wrong_password"/>
  
  <dataSource jndiName="jdbc/defaultauth" containerAuthDataRef="auth1"> <!-- id omitted for testing -->
    <connectionManager enableSharingForDirectLookups="false"/>  
    <jdbcDriver id="NestedDerbyDriver" libraryRef="Derby"
     javax.sql.DataSource="org.apache.derby.jdbc.EmbeddedDataSource"
     javax.sql.ConnectionPoolDataSource="org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource"
     javax.sql.XADataSource="org.apache.derby.jdbc.EmbeddedXADataSource"/>
    <onConnect>SET CURRENT SCHEMA = APP</onConnect>
    <onConnect>SET CURRENT SQLID = APP</onConnect>
    <properties.derby.embedded databaseName="memory:defaultdb" createDatabase="create"/>
  </dataSource>

  <dataSource id="WrongDefaultAuth" jndiName="jdbc/wrongdefaultauth"
    connectionManagerRef="pool1" containerAuthDataRef="auth2" commitOrRollbackOnCleanup="rollback"
    invalidProperty="The property's value." jdbcDriverRef="DerbyDriver" queryTimeout="2m10s"
    recoveryAuthDataRef="auth2" statementCacheSize="15" validationTimeout="20s">
    <properties databaseName="memory:defaultdb" createDatabase="create"/>
  </dataSource>

  <connectionManager id="pool1" maxPoolSize="10" purgePolicy="ValidateAllConnections"/>

  <jdbcDriver id="DerbyDriver" libraryRef="Derby"/>
  
  <javaPermission codebase="${shared.resource.dir}/derby/derby.jar" className="java.security.AllPermission"/>
</server>