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

-=﻿READ ME=-

This is some clarification on what is included in the jUDDI XLT test suite and how to use it to run load tests.

-Packages in this test suite (under src/)-

When scripting started, the idea was to do all jUDDI manipulations through the Pluto Portal web interface. The packages org.apache.juddi.xlt.action.http, org.apache.juddi.xlt.validators and org.apachejuddi.xlt.test.http represent what was written for this purpose before it was decided that we would access jUDDI with uddi_client during testing instead.

-org.apache.juddi.xlt.action.http: includes actions that access the juddi pluto portal. 

-org.apache.juddi.xlt.validators: a few easily reusable validators for the http actions. 

-org.apache.juddi.xlt.test.http: single test (so far) that just browses the juddi node through the pluto portal.

All other packages have to do with testing jUDDI by accessing it through SOAP messages with the help of uddi_client.

-org.apache.juddi.xlt.action.SOAP: includes actions that query the juddi node trough an exchange of SOAP massages. 

-org.apache.juddi.xlt.test: include general purpose test ( i.e. TViewNode, prints all businesses and services to standard ouput) and test that are not done yet (i.e. TSubscription).

-org.apache.juddi.xlt.test.benchmark: includes test that were used to benchmarck a certain jUDDI setup. Basically measures how many results can be found in a search, how quickly businesses can be published, and the rate at which searches can be executed. All these test should be run on there own.
	
	TRegisterBusinessBM: Publishes a business with a unique name and some services under it, 
	then prints out the name of the business to file (BusinessNames.txt). Can be used to measure 
	how fast businesses can be published to a node.

	TFindBusinessBM: Finds a business in a preloaded node. This test can read in a file 
	containing the names of the businesses already published to the node (such as BusinessNames.txt
 	generated by TRegisterBusiness) and then search for those businesses. Can be used to measure 
	the maximum rate at which search requests can be returned. When the BusinessNames.txt file is
	used the result is always a lone business since the search is for a name and the names are 
	all unique. 

	TSearchableLimitBM: Publishes a business and searches for all businesses. This test should be 
	run with only one user starting with an empty database. It will eventually find how many 
	business results can be returned for a single search, by incrementally adding a business to the
 	node and then searching for the wild-card character (%). This does not include returning a SOAP 
	message with all the businesses (max results returned is set to 5).

	TSearchableLimitStaticAuthTokenBM: This does the same thing as TSearchableLimitBM but using 
	the same AuthToken troughout.

-org.apache.juddi.xlt.test.performance: three self sustaining test (no preload needed)that register, search for and delete businesses. They can be run in parallel and provide a certain amount of load to the node. Although there is only one of these test called TRegisterBusiness, all three test actually publish businesses. The two other test do so to generate a pool of existing businesses that can be searched for or deleted.

	TRegisterBusinessPT: This works in the same way TRegisterBusinessBM does but without writing 
	published business names to a file.

	TFindBusinessPT: This test case either publishes a business to the jUDDI node or finds one. 
	When it publishes, it retains the returned BusinessEntity object from the save_business operation
 	in a data pool. The data pool is in turn queried for a BusinessEntity when the test searches for 
	a business. This adds some randomness to the searches and makes it so that the node doesn't have 
	to be preloaded with data.

	TDeleteBusinessPT: This test case either publishes a business to the jUDDI node or deletes one. 
	When it publishes, it retains the returned BusinessEntity object from the save_business operation 
	in a data pool. The data pool is in turn queried for a BusinessEntity when the test deletes a business
	from the node. 

-org.apache.juddi.xlt.flow: Flows are usually a collection of actions that are often run in the same order in a test suite. The RegisterBusinessFlow publishes a business to a node and also publishes services under it. This facilitates the reuse of this sequence of actions.                    
