# Copyright 2001-2009 The Apache Software Foundation.
#
# Licensed 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.

################################################################################
#
# Test Run Specific Settings
#
# Use this section to configure an (optional) file which contains the settings
# specific to a certain load test run. This is useful to externalize the
# definition of a certain load profile or a set of test conditions. This way,
# many of these configurations can be defined and prepared in advance and used
# as needed. For example, to switch to another load profile, just name the
# respective properties file.
#
################################################################################

## The file with test run specific settings.
com.xceptance.xlt.testPropertiesFile = test.properties

################################################################################
#
# Test Case Mapping
#
# Maps the test case class onto a load test name. The load test name will be
# referenced later in the load test configuration. You can map the same class
# to multiple load test names if needed.
#
################################################################################

## Test case specific configuration.
### Test cases
com.xceptance.xlt.loadtests.TDeleteService.class = org.apache.juddi.xlt.test.TDeleteService
com.xceptance.xlt.loadtests.TFindServiceByName.class = org.apache.juddi.xlt.test.TFindServiceByName
com.xceptance.xlt.loadtests.TGetAuthToken.class = org.apache.juddi.xlt.test.TGetAuthToken
com.xceptance.xlt.loadtests.TPublishSingleService.class = org.apache.juddi.xlt.test.TPublishSingleService
com.xceptance.xlt.loadtests.TRegisterBusinessWithServices.class = org.apache.juddi.xlt.test.TRegisterBusinessWithServices
com.xceptance.xlt.loadtests.TSubscription.class = org.apache.juddi.xlt.test.TSubscription
com.xceptance.xlt.loadtests.TViewNode.class = org.apache.juddi.xlt.test.TViewNode

### Benchmark test cases
com.xceptance.xlt.loadtests.TFindBusinessBM.class = org.apache.juddi.xlt.test.benchmark.TFindBusinessBM
com.xceptance.xlt.loadtests.TRegisterBusinessBM.class = org.apache.juddi.xlt.test.benchmark.TRegisterBusinessBM
com.xceptance.xlt.loadtests.TSearchableLimitBM.class = org.apache.juddi.xlt.test.benchmark.TSearchableLimitBM
com.xceptance.xlt.loadtests.TSearchableLimitStaticAuthTokenBM.class = org.apache.juddi.xlt.test.benchmark.TSearchableLimitStaticAuthTokenBM

### Preformance test cases
com.xceptance.xlt.loadtests.TDeleteBusinessPT.class = org.apache.juddi.xlt.test.performance.TDeleteBusinessPT
com.xceptance.xlt.loadtests.TFindBusinessPT.class = org.apache.juddi.xlt.test.performance.TFindBusinessPT
com.xceptance.xlt.loadtests.TRegisterBusinessPT.class = org.apache.juddi.xlt.test.performance.TRegisterBusinessPT

###HTTP test cases
com.xceptance.xlt.loadtests.TBrowse.class = org.apache.juddi.xlt.test.TBrowse

################################################################################
#
# Test Specific Settings
#
# Prefix test case specific settings with the test class name.
#
################################################################################

##### General Settings (we refer to them by full path) #####

## The URL of Pluto's home page.
url = http://localhost:8080/pluto/portal

username = root
password = root


##### TVisitor Options #####

## How many articles do we want to read? It might happen that we read the same one again
## and again if we do not have enough articles available.
com.xceptance.xlt.samples.tests.TVisitor.article-read-count = 2

## How often should we page before we read articles?
com.xceptance.xlt.samples.tests.TVisitor.paging-count = 2

## Randomize
com.xceptance.xlt.samples.tests.TVisitor.randomize = false


##### TJSVisitor Options #####

## How many articles do we want to read? It might happen that we read the same one again
## and again if we do not have enough articles available.
com.xceptance.xlt.samples.tests.TJSVisitor.article-read-count = 2

## How often should we page before we read articles?
com.xceptance.xlt.samples.tests.TJSVisitor.paging-count = 2

## Randomize
com.xceptance.xlt.samples.tests.TJSVisitor.randomize = false


##### TLWVisitor Options #####

## How many articles do we want to read? It might happen that we read the same one again
## and again if we do not have enough articles available.
com.xceptance.xlt.samples.tests.TLWVisitor.article-read-count = 3

## How often should we page before we read articles?
com.xceptance.xlt.samples.tests.TLWVisitor.paging-count = 2

## Randomize
com.xceptance.xlt.samples.tests.TLWVisitor.randomize = true


##### TAuthor Options #####

## Our user name and password to log on.
com.xceptance.xlt.samples.tests.TAuthor.username = username
com.xceptance.xlt.samples.tests.TAuthor.password = password

## How many articles do we want to write?
com.xceptance.xlt.samples.tests.TAuthor.write-count = 2


##### TTagVisitor Options #####

## How many articles do we want to read? It might happen that we read the same one again
## and again if we do not have enough articles available.
com.xceptance.xlt.samples.tests.TTagVisitor.article-read-count = 3

## How often should we page before we read articles?
com.xceptance.xlt.samples.tests.TTagVisitor.paging-count = 2

## Randomize
com.xceptance.xlt.samples.tests.TTagVisitor.randomize = true


##### TDateVisitor Options #####

## How many articles do we want to read? It might happen that we read the same one again
## and again if we do not have enough articles available.
com.xceptance.xlt.samples.tests.TDateVisitor.article-read-count = 3

## Randomize
com.xceptance.xlt.samples.tests.TDateVisitor.randomize = true


##### TSearchVisitor Options #####

## How many articles do we want to search for?
com.xceptance.xlt.samples.tests.TSearchVisitor.searches = 3

## How often should we page before we read articles?
com.xceptance.xlt.samples.tests.TSearchVisitor.paging-count = 2

## Randomize
com.xceptance.xlt.samples.tests.TSearchVisitor.randomize = true

##### TUnpublish Options #####

## Our user name and password to log on.
com.xceptance.xlt.samples.tests.TUnpublish.username = username
com.xceptance.xlt.samples.tests.TUnpublish.password = password

## How many articles do we want to unpublish?
com.xceptance.xlt.samples.tests.TUnpublish.unpublish-count = 1

##### TDeleteService Options #####

org.apache.juddi.xlt.test.TDeleteService.name = Xceptance XLT UDDI - Sample Service

##### TRegisterBusiness #####

org.apache.juddi.xlt.test.TRegisterBusinessWithServices.businessName = Xceptance - Sample Business
org.apache.juddi.xlt.test.TRegisterBusinessWithServices.businessUrl = http://www.xceptance.de

##### TRegisterBusinessWithServices #####

org.apache.juddi.xlt.test.TRegisterBusinessWithServices.maxNumberOfBusinessServices = 7

##### TRegisterBusiness #####

org.apache.juddi.xlt.test.performance.TRegisterBusinessPT.maxNumberOfBusinessServices = 3

##### TBrowseBusinessByName

org.apache.juddi.xlt.test.TBrowseBusinessByName.businessToSearch = %Xceptance - Sample Business%

##### TFindBusiness #####

org.apache.juddi.xlt.test.performance.TFindBusinessPT.maxNumberOfBusinessServices = 3

##### TDeleteBusiness #####

org.apache.juddi.xlt.test.performance.TDeleteBusinessPT.maxNumberOfBusinessServices = 3

################################################################################
#
# Project-Specific Report Generator Settings
#
# In order to reduce the list of requests in the report, the values of different
# requests can be merged together. You may specify one or more merge rules as
# outlined below:
#
#   com.xceptance.xlt.reportgenerator.requestMergeRules.<num>.<param> = <value>
#
# The rules are sorted numerically based on <num> and are applied in ascending
# order.
#
# The supported values for "<param>" are:
#
#   newName .............. the new request name (required)
#   namePattern .......... the reg-ex defining a matching request name
#   contentTypePattern ... the reg-ex defining a matching response content type
#   urlPattern ........... the reg-ex defining a matching request URL
#   stopOnMatch........... whether or not to process the next rule even if the 
#                          current rule applied (defaults to true)
#
# At least one of namePattern, contentTypePattern, or urlPattern must be
# specified. If more than one pattern is given, all given patterns must
# match.
#
# Note that "newName" may contain placeholders, which are replaced with the 
# specified capturing group from the respective pattern. The placeholder  
# format is as follows: {<category>:<capturingGroupIndex>}, where <category> is 
# one of "n" (for namePattern), "c" (for contentTypePattern), "s" (for 
# statusCodePattern), or "u" (for urlPattern) and <capturingGroupIndex> denotes 
# the respective capturing group in the selected pattern. 
#
################################################################################

#com.xceptance.xlt.reportgenerator.requestMergeRules.0.newName = {n:0} CSS Files
#com.xceptance.xlt.reportgenerator.requestMergeRules.0.namePattern = [^.]+
#com.xceptance.xlt.reportgenerator.requestMergeRules.0.contentTypePattern =
#com.xceptance.xlt.reportgenerator.requestMergeRules.0.statusCodePattern =
#com.xceptance.xlt.reportgenerator.requestMergeRules.0.urlPattern = \\.css$
#com.xceptance.xlt.reportgenerator.requestMergeRules.0.stopOnMatch = true

#com.xceptance.xlt.reportgenerator.requestMergeRules.1.newName = {n:0} JavaScript Files
#com.xceptance.xlt.reportgenerator.requestMergeRules.1.namePattern = [^.]+
#com.xceptance.xlt.reportgenerator.requestMergeRules.1.contentTypePattern =
#com.xceptance.xlt.reportgenerator.requestMergeRules.1.statusCodePattern =
#com.xceptance.xlt.reportgenerator.requestMergeRules.1.urlPattern = \\.js$
#com.xceptance.xlt.reportgenerator.requestMergeRules.1.stopOnMatch = true

#com.xceptance.xlt.reportgenerator.requestMergeRules.2.newName = {n:0} Image Files  
#com.xceptance.xlt.reportgenerator.requestMergeRules.2.namePattern = [^.]+
#com.xceptance.xlt.reportgenerator.requestMergeRules.2.contentTypePattern = image  
#com.xceptance.xlt.reportgenerator.requestMergeRules.2.statusCodePattern =
#com.xceptance.xlt.reportgenerator.requestMergeRules.2.urlPattern = 
#com.xceptance.xlt.reportgenerator.requestMergeRules.2.stopOnMatch = true
