#
# 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.
#

# Local address to bind to.
local.ip=127.0.0.1

# TCP communication port
comm.tcp.port=30010

# JBoss JNDI
# JBoss context factory for JNDI connection establishing.
jboss.jndi.context.factory=org.jnp.interfaces.NamingContextFactory
# JBoss specific parameter for JNDI connection establishing.
jboss.jndi.pkg.prefixes=org.jboss.naming:org.jnp.interfaces
# URL of JBoss server for the 1st node.
jboss.jndi.node1.provider.url=jnp://localhost:1199
# URL of JBoss server for the 2nd node.
jboss.jndi.node2.provider.url=jnp://localhost:1299
# JBoss Discovery test max wait time.
jboss.disco.test.wait=180000

# Deployment configuration paths.
# You will either need to override deploy.uri.dir or supply CLASSES_URI as system property.
#
# Path to keystore with private and public keys.
deploy.uri.secure.keystore=@{IGNITE_HOME}/modules/tests/config/securedeploy/keystore
# Temporary dir where deployment unit stored before deploy.
deploy.uri.tmpdir=${java.io.tmpdir}/gg
# Deployment dir for file scanner test with different types of GAR's.
deploy.uri.file2.path=${java.io.tmpdir}/gg/verification/
# URI string.
deploy.uri.file2=file://freq=200@localhost/${java.io.tmpdir}/gg/verification/
# File scanner URI for local file deployment.
deploy.uri.file=file://localhost/@{IGNITE_HOME}/modules/extdata/uri/target/file/
# FTP scanner URI for FTP deployment.
deploy.uri.ftp=ftp://ftptest:iddqd@94.72.60.102:21/test/deployment
# Classes scanner URI for classes deployment. Must be overridden for every user.
deploy.uri.cls=${CLASSES_URI}
# Http scanner URI for HTTP deployment.
deploy.uri.http=http://fake.uri
# Http scanner URI for secure SSL HTTPs deployment.
deploy.uri.https=https://fake.uri
# Directory with descriptors to construct GAR files.
deploy.gar.descriptor.dir=modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/META-INF

# Directory with a number of descriptors for the Ant gar task.
ant.gar.descriptor.dir=modules/extdata/p2p/META-INF
# Temporary directory for the Ant task resulting GAR file.
ant.gar.tmpdir=${java.io.tmpdir}/gg
# The same as p2p.uri.cls but without protocol
ant.gar.srcdir=@{IGNITE_HOME}/modules/extdata/uri/target/classes/

# Paths to use in URI deployment SPI tests
urideployment.jar.uri=modules/extdata/uri/target/deploy/uri.jar
urideployment.path.tmp=modules/extdata/uri/target/deploy_tmp/

# GAR paths to use in URI deployment SPI tests
ant.urideployment.gar.uri=file://freq=5000@localhost/EXTDATA/uri/target/deploy
ant.urideployment.gar.file=modules/extdata/uri/target/deploy/uri.gar
ant.urideployment.gar.libs-file=modules/extdata/uri/target/deploy2/uri-libs.gar
ant.urideployment.gar.classes-file=modules/extdata/uri/target/deploy2/uri-classes.gar
ant.urideployment.gar.path=modules/extdata/uri/target/deploy/

# Classpath directory for GridP2PUserVersionChangeSelfTest
ant.userversion.class.dir=@{IGNITE_HOME}/modules/tests/java/

# Multicast discovery self test.
discovery.mbeanserver.selftest.baseport=50000

# TCP communication self test.
comm.mbeanserver.selftest.baseport=50100

# Kernel tests.
grid.comm.selftest.sender.timeout=1000
grid.comm.selftest.timeout=10000

#P2P tests
#Overwrite this property. It should point to P2P module compilation directory.
p2p.uri.cls=file://localhost/@{IGNITE_HOME}/modules/extdata/p2p/target/classes/
p2p.uri.cls.second=file://localhost/@{IGNITE_HOME}/modules/extdata/uri/target/classes/

# AOP tests.
# Connector port for RMI.
connector.rmi.port=7657
# Connector port for XFire Web Service.
connector.ws.port=9090

# Load test duration in minutes.
load.test.duration=500
load.test.threadnum=50
load.test.nodenum=5

# Loaders tests
loader.self.test.config=modules/core/src/test/config/loaders/grid-cfg.xml
loader.self.multipletest.config=modules/core/src/test/config/loaders/grid-cfg-2-grids.xml
loader.self.test.jboss.config=modules/core/src/test/config/loaders/grid-cfg.xml

# WebSphere jmx properties
websphere.jmx.connector.host=localhost
websphere.jmx.connector.port=8880
websphere.jmx.connector.security=false
websphere.jmx.username=
websphere.jmx.pwd=

# GlassFish jmx properties for GlassFish Loader
glassfish.jmx.rmi.connector.port=8686
glassfish.jmx.username=admin
glassfish.jmx.password=adminadmin

# Tomcat jmx properties for Servlet Loader
tomcat.jmx.rmi.connector.port=1097

# Marshaller for tests
#marshaller.class=org.apache.ignite.marshaller.jdk.GridJdkMarshaller

# EC2 configuration for tests
#amazon.access.key=
#amazon.secret.key=

# SSH config.
ssh.username=uname
ssh.password=passwd

# SSL tests keystore.
ssl.keystore.path=@{IGNITE_HOME}/modules/clients/src/test/keystore/server.jks
ssl.keystore.password=123456

# node01 signed with trust-one, node02 and node03 by trust-two, node02old is expired
# trust-both contains both CAs
ssl.keystore.node01.path=@{IGNITE_HOME}/modules/clients/src/test/keystore/ca/node01.jks
ssl.keystore.node02.path=@{IGNITE_HOME}/modules/clients/src/test/keystore/ca/node02.jks
ssl.keystore.node03.path=@{IGNITE_HOME}/modules/clients/src/test/keystore/ca/node03.jks
ssl.keystore.trustone.path=@{IGNITE_HOME}/modules/clients/src/test/keystore/ca/trust-one.jks
ssl.keystore.trusttwo.path=@{IGNITE_HOME}/modules/clients/src/test/keystore/ca/trust-two.jks
ssl.keystore.trustboth.path=@{IGNITE_HOME}/modules/clients/src/test/keystore/ca/trust-both.jks
ssl.keystore.node02old.path=@{IGNITE_HOME}/modules/clients/src/test/keystore/ca/node02old.jks

# Hadoop home directory.
hadoop.home=@{HADOOP_HOME}
