#
# Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License v. 2.0, which is available at
# http://www.eclipse.org/legal/epl-2.0.
#
# This Source Code may also be made available under the following Secondary
# Licenses when the conditions for such availability set forth in the
# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
# version 2 with the GNU Classpath Exception, which is available at
# https://www.gnu.org/software/classpath/license.html.
#
# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
#

#
# By default a conneciton is made to the server specified by:
#     amxtext.connect.host, amxtext.connect.port,
#     amxtest.connect.user, amxtest.connect.password,
#     amxtest.connect.useTLS,
#     [amxtest.connect.truststore, amxtest.connect.truststorePassword]
#
# Some unit tests are standalone and do not require a connection.  You
# may set amxtest.connect=false and no connection will be made.  You will
# want to remove any tests requiring a connection from the list of classes
# in the file given by amxtest.testClasses because without a connection
# such tests will always fail.
#
amxtest.connect=true

# Name of host that is running the rmi server
amxtest.connect.host=localhost

# this is the rmi port
amxtest.connect.port=8888

# the name of the admin
amxtest.connect.user=admin

# the admin's password
amxtest.connect.password=adminadmin

#
# amxtest.connect.useTLS must match the TLS setting of the server's
# JMX RMI connector.
#
# Defaults:
# EE build:  set to true
# PE build:  set to false
amxtest.connect.useTLS=false

#
# The name of the truststore and its password to be used if TLS is enabled
# These may be left alone, even if TLS is not used.
# There is no need to pre-create the truststore.
#
amxtest.connect.truststore=./amx-test-truststore
amxtest.connect.truststorePassword=changeme

#
# Enabling threading is a more rigorous test,
# since related tests are run in parallel.
# If major changes are made, be sure to set this to true.
#
# NOTE: HTTPListenerConfigTest tends to hang
# some kind of internal infrastructure bug (non-AMX).
amxtest.threaded=false

# when amxtest.verbose is true, timings are emitted for most tests
# as well an anything output from printVerbose()
amxtest.verbose=true


# The location of a list of the classes to be tested.
# If all classes are to be tested then this line can be commented
# out. All of the tests to be tested are always listed when
# the tests are run, so its
# possible to recreate this file with the full list simply by
# executing the tests!
amxtest.testClasses=amxtest.classes


#
# Some tests have been known to fail on a 2nd try
# due to bugs in not properly removing artifacts
#
amxtest.iterations=1


#
# The DeploymentMgr unit test looks for a common-separated
# list of archives to deploy in the propery 'amxtest.deploy.files'
# Comma-delimited list of archives or directories
#
amxtest.deploy.files=tests/deploy


#
# Node agents to included in testing.
#
amxtest.nodeAgents=ALL

#
# The name of the node agent running on the same machine as the DAS
# (optional, but create a node agent and set this value if you
# want tests that require a node agent to run).
#
amxtest.dasNodeAgent=HOSTNAME


#
# Whether expanded testing is to be done. This means things
# such as creating extra servers, clusters, etc.
#
amxtest.expandedTesting=true


######################### Offline Testing ###########################
### These parameters control testing of AMX in "Offline" mode.    ###
### In offline mode, only certain utility MBeans and              ###
### config MBeans are tested                                      ###
###                                                               ###
#####################################################################

#
# Whether to test the offline config implementation as opposed
# to the DAS.
# amxtest.connect.* is ignored if this is true
#
amxtest.testOffline=false

#
# If amxtest.testOffline=true, set this to a valid file path
# for a domain.xml.
#
amxtest.testOffline.domainXML=G:/run/domains/domain1/config/domain.xml













