This project has retired. For details please refer to its Attic page.
API_040_BusinessServiceLoadTest xref
View Javadoc
1   /*
2    * Copyright 2001-2009 The Apache Software Foundation.
3    * 
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *      http://www.apache.org/licenses/LICENSE-2.0
8    * 
9    * Unless required by applicable law or agreed to in writing, software
10   * distributed under the License is distributed on an "AS IS" BASIS,
11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12   * See the License for the specific language governing permissions and
13   * limitations under the License.
14   */
15  package org.apache.juddi.api.impl;
16  
17  import java.io.File;
18  import java.rmi.RemoteException;
19  
20  import org.apache.commons.configuration.ConfigurationException;
21  import org.apache.commons.logging.Log;
22  import org.apache.commons.logging.LogFactory;
23  import org.apache.juddi.Registry;
24  import org.apache.juddi.config.AppConfig;
25  import static org.apache.juddi.config.AppConfig.JUDDI_CONFIGURATION_FILE_SYSTEM_PROPERTY;
26  import org.apache.juddi.config.Property;
27  import org.apache.juddi.query.util.FindQualifiers;
28  import org.apache.juddi.v3.tck.TckBusiness;
29  import org.apache.juddi.v3.tck.TckBusinessService;
30  import org.apache.juddi.v3.tck.TckPublisher;
31  import org.apache.juddi.v3.tck.TckSecurity;
32  import org.apache.juddi.v3.tck.TckTModel;
33  import org.junit.AfterClass;
34  import org.junit.Assert;
35  import org.junit.Assume;
36  import org.junit.BeforeClass;
37  import org.junit.Ignore;
38  import org.junit.Test;
39  import org.uddi.api_v3.BusinessList;
40  import org.uddi.api_v3.FindBusiness;
41  import org.uddi.api_v3.FindService;
42  import org.uddi.api_v3.Name;
43  import org.uddi.api_v3.ServiceList;
44  import org.uddi.v3_service.DispositionReportFaultMessage;
45  import org.uddi.v3_service.UDDISecurityPortType;
46  
47  /**
48   * @author <a href="mailto:kstam@apache.org">Kurt T Stam</a>
49   * @author <a href="mailto:alexoree@apache.org">Alex O'Ree</a>
50   */
51  public class API_040_BusinessServiceLoadTest {
52  
53          private static Log logger = LogFactory.getLog(API_040_BusinessServiceTest.class);
54  
55          private static API_010_PublisherTest api010 = new API_010_PublisherTest();
56          protected static TckTModel tckTModel = new TckTModel(new UDDIPublicationImpl(), new UDDIInquiryImpl());
57          protected static TckBusiness tckBusiness = new TckBusiness(new UDDIPublicationImpl(), new UDDIInquiryImpl());
58          protected static TckBusinessService tckBusinessService = new TckBusinessService(new UDDIPublicationImpl(), new UDDIInquiryImpl());
59          private static UDDIInquiryImpl inquiry = new UDDIInquiryImpl();
60  
61          int numberOfBusinesses = 100;
62          int numberOfServices = 100;
63  
64          protected static String authInfoJoe = null;
65          protected static String authInfoSam = null;
66  
67          @BeforeClass
68          public static void setup() throws ConfigurationException {
69                  File f = new File(".");
70                  System.out.println("Current working dir is " + f.getAbsolutePath());
71                  System.setProperty(JUDDI_CONFIGURATION_FILE_SYSTEM_PROPERTY, f.getAbsolutePath()+"/src/test/resources/juddiv3DisabledTModelKeybag.xml");
72                  Registry.start();
73                  logger.info("API_040_BusinessServiceTestPerformance");
74                  logger.debug("Getting auth tokens..");
75                  try {
76                          api010.saveJoePublisher();
77                          UDDISecurityPortType security = new UDDISecurityImpl();
78                          authInfoJoe = TckSecurity.getAuthToken(security, TckPublisher.getJoePublisherId(), TckPublisher.getJoePassword());
79                          String authInfoUDDI = TckSecurity.getAuthToken(security, TckPublisher.getUDDIPublisherId(), TckPublisher.getUDDIPassword());
80                          tckTModel.saveUDDIPublisherTmodel(authInfoUDDI);
81                          tckTModel.saveTModels(authInfoUDDI, TckTModel.TMODELS_XML);
82                  } catch (RemoteException e) {
83                          logger.error(e.getMessage(), e);
84                          Assert.fail("Could not obtain authInfo token.");
85                  }
86          }
87  
88          @AfterClass
89          public static void shutdown() throws ConfigurationException {
90                  tckTModel.deleteCreatedTModels(authInfoJoe);
91                  Registry.stop();
92                  System.clearProperty(JUDDI_CONFIGURATION_FILE_SYSTEM_PROPERTY);
93          }
94  
95          /**
96           * loads the database with 100x100 services, runs a basic query, then
97           * deletes the records
98           *
99           * @throws DispositionReportFaultMessage
100          * @throws ConfigurationException
101          */
102         @Test
103         //@Ignore
104         public void find20Businesses() throws DispositionReportFaultMessage, ConfigurationException {
105                 //disable TModelBag filtering
106                 Assume.assumeTrue(TckPublisher.isLoadTest());
107                 try {
108                         //logger.info("Disabling findBusiness tModelBag filtering....");
109                         //AppConfig.getConfiguration().setProperty(Property.JUDDI_ENABLE_FIND_BUSINESS_TMODEL_BAG_FILTERING, false);
110                         //logger.info("findBusiness tModelBag filtering is enabled: "
111                         //        + AppConfig.getConfiguration().getProperty(Property.JUDDI_ENABLE_FIND_BUSINESS_TMODEL_BAG_FILTERING));
112                         System.setProperty(JUDDI_CONFIGURATION_FILE_SYSTEM_PROPERTY, "/src/test/resources/juddiv3DisabledTModelKeybag.xml");
113                         tckTModel.saveJoePublisherTmodel(authInfoJoe);
114                         long startSave = System.currentTimeMillis();
115                         //loading up 100 businesses, with a 100 services each
116                         tckBusiness.saveJoePublisherBusinesses(authInfoJoe, numberOfBusinesses);
117                         for (int i = 0; i < numberOfBusinesses; i++) {
118                                 tckBusinessService.saveJoePublisherServices(authInfoJoe, i, numberOfServices);
119                         }
120                         long saveDuration = System.currentTimeMillis() - startSave;
121                         System.out.println("Saved " + numberOfBusinesses + " businesses with each " + numberOfServices + " services in " + saveDuration + "ms");
122                         System.out.println("Tiggering findBusiness query...");
123                         //find 20 businesses by name
124                         FindBusiness fb = new FindBusiness();
125                         org.uddi.api_v3.FindQualifiers apiFq = new org.uddi.api_v3.FindQualifiers();
126                         apiFq.getFindQualifier().add(FindQualifiers.APPROXIMATE_MATCH);
127                         apiFq.getFindQualifier().add(FindQualifiers.CASE_INSENSITIVE_MATCH);
128                         fb.setFindQualifiers(apiFq);
129                         Name name = new Name();
130                         name.setValue("John%");
131                         fb.getName().add(name);
132                         fb.setMaxRows(20);
133                         long startFind = System.currentTimeMillis();
134                         BusinessList result = inquiry.findBusiness(fb);
135                         long findDuration = System.currentTimeMillis() - startFind;
136                         System.out.println("Find 20 businesses took " + findDuration + "ms. Size=" + result.getBusinessInfos().getBusinessInfo().size());
137                         // it takes less then 1 second, make sure it stays faster then 5 seconds
138                         if (findDuration > 20000) {
139                                 Assert.fail("This operation took too long to process");
140                         }
141                         //Assert.assertTrue(findDuration < 5000);
142                         System.out.println("Tiggering findService query...");
143                         FindService fs = new FindService();
144                         fs.setFindQualifiers(apiFq);
145                         name.setValue("Service One%");
146                         fs.getName().add(name);
147                         startFind = System.currentTimeMillis();
148                         //this will match ALL services (100 * 100 =) 10,000 services
149                         int all = numberOfBusinesses * numberOfServices;
150                         System.out.println("Matching " + all + " services");
151                         ServiceList serviceList = inquiry.findService(fs);
152                         findDuration = System.currentTimeMillis() - startFind;
153                         System.out.println("Find " + all + " services took " + findDuration + "ms. Size=" + serviceList.getServiceInfos().getServiceInfo().size());
154                         if (findDuration > 20000) {
155                                 Assert.fail("This operation took too long to process");
156                         }
157 
158                 } finally {
159                         System.out.println("Tiggering deletion...");
160                         long startDelete = System.currentTimeMillis();
161                         for (int i = 0; i < numberOfBusinesses; i++) {
162                                 tckBusinessService.deleteJoePublisherServices(authInfoJoe, i, numberOfServices);
163                         }
164                         long deleteDuration = System.currentTimeMillis() - startDelete;
165                         System.out.println("Delete all business and services in " + deleteDuration + "ms");
166                         tckBusiness.deleteJoePublisherBusinesses(authInfoJoe, numberOfBusinesses);
167                         tckTModel.deleteJoePublisherTmodel(authInfoJoe);
168                 }
169 
170         }
171 
172 }