You are viewing a plain text version of this content. The canonical link for it is here.
Posted to olio-commits@incubator.apache.org by sh...@apache.org on 2009/09/23 21:18:58 UTC

svn commit: r818271 - /incubator/olio/workload/java/trunk/src/org/apache/olio/workload/driver/UIDriver.java

Author: shanti
Date: Wed Sep 23 21:18:58 2009
New Revision: 818271

URL: http://svn.apache.org/viewvc?rev=818271&view=rev
Log:
More fixes for OLIO-112. Did some code cleanup, called prepareEvent() in doAddEvent().

Modified:
    incubator/olio/workload/java/trunk/src/org/apache/olio/workload/driver/UIDriver.java

Modified: incubator/olio/workload/java/trunk/src/org/apache/olio/workload/driver/UIDriver.java
URL: http://svn.apache.org/viewvc/incubator/olio/workload/java/trunk/src/org/apache/olio/workload/driver/UIDriver.java?rev=818271&r1=818270&r2=818271&view=diff
==============================================================================
--- incubator/olio/workload/java/trunk/src/org/apache/olio/workload/driver/UIDriver.java (original)
+++ incubator/olio/workload/java/trunk/src/org/apache/olio/workload/driver/UIDriver.java Wed Sep 23 21:18:58 2009
@@ -30,6 +30,7 @@
 import javax.xml.xpath.XPathExpressionException;
 import java.io.File;
 import java.io.IOException;
+import java.io.InputStream;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -178,7 +179,7 @@
     private String personDetailURL;
     private String homepageURL, logoutURL, loginURL;
     private String tagSearchURL;
-    private String addEventURL, addPersonURL, eventDetailURL, addEventResultURL;
+    private String addEventURL, addPersonURL, eventDetailURL;
     private String fileUploadPersonURL, fileUploadEventURL;
     private String addAttendeeURL, fileServiceURL; //GET update.php?id=$eventid
     private String[] homepageStatics, personStatics,
@@ -271,8 +272,7 @@
         
         /*adding context root */
         String contextRoot = "/webapp";
-        
-        
+               
         // hostURL = "http://" + hostPort.name + ":" + port;
         baseURL = hostURL + contextRoot;
         personDetailURL = baseURL + "/person?actionType=display_person&user_name=";
@@ -280,7 +280,7 @@
         tagCloudURL = baseURL + "/tag/display";
         addEventURL = baseURL + "/event/addEvent";
         //should this go to Event Detail?
-        addEventResultURL = baseURL + "/event/detail";
+        //addEventResultURL = baseURL + "/event/detail";
         addPersonURL = baseURL + "/site.jsp?page=addPerson.jsp";        
         fileUploadPersonURL = baseURL + "/api/person/fileuploadPerson";        
         fileUploadEventURL = baseURL + "/api/event/addEvent";
@@ -348,9 +348,9 @@
 		cachedHeaders.put("If-Modified-Since", ifmod);
         isCached = cached();
         
-        // If all the client accessEclipsElink at the same time, this cause
-        // throws the Exception - invalide operator: 
-        //This is a work around while the problem is ebing investigated
+        // If all the clients access EclipsElink at the same time, this may cause
+        // the Exception - invalide operator: 
+        //This is a work around while the problem is being investigated
         synchronized (UIDriver.class) {
             if (firstTime) {
                 try {
@@ -371,7 +371,6 @@
     public void doHomePage() throws IOException {
         logger.finer("HomePage: Accessing " + homepageURL);
         http.fetchURL(homepageURL);
-        //logger.info("doHomePage - cachedURLs size is " + cachedURLs.size() );
         imgBytes = 0;
         imagesLoaded = 0;
 
@@ -393,7 +392,7 @@
             driverMetrics.homePageImages += images.size();
             driverMetrics.homePageImagesLoaded += imagesLoaded;
             driverMetrics.homePageImageBytes += imgBytes;
-		}
+        }
     }
 
     @BenchmarkOperation (
@@ -401,46 +400,20 @@
         max90th = 1,
         timing  = Timing.AUTO
     )
-    public void doLogin() throws IOException {
+    public void doLogin() throws IOException, Exception {
+        logger.finer("In doLogin");
         int randomId = 0; //use as password
         username = null;
 
         if (!isLoggedOn) {
             randomId = selectUserID();
             username = UserName.getUserName(randomId);
-            // TEMP
-            //String lurl = loginURL + "?user_name=" + username + "&password=" +
-             //       randomId;
-            try {
+            logger.fine("Logging in as " + username + ", " + randomId);
             http.readURL(loginURL, constructLoginPost(randomId), loginHeaders);
-                //http.readURL(url);
-                http.fetchURL(homepageURL);
-            }
-            catch (Exception e) {
-               logger.severe("logging in: url = " + constructLoginPost(randomId));
-               e.printStackTrace();
-            }
-            //loginTime = ctx.getTime();
             // This redirects to home.
-            // TEMP
-            //????http.fetchURL(homepageURL);           
-            //http.fetchURL(loginURL, constructLoginPost(randomId),
-            //        loginHeaders);            
-            /*******
-            if (http.getResponseBuffer().indexOf("Not logged in") != -1) {                                
-                //logger.warning(http.getResponseBuffer().toString());
-                throw new RuntimeException("Login as " + username + ", " +
-                                                        randomId + " failed.");
-            } else if (http.getResponseBuffer().indexOf("Logout") == -1) {
-                logger.severe("Neither logged in or not logged in.");
-                logger.severe ("loginURL = " + loginURL + " post msg = " + constructLoginPost(randomId));
-                System.exit(1);
-                //logger.warning(http.getResponseBuffer().toString());
-            }
-            ********/
-            //logger.info("response buffer is " + http.getResponseBuffer());
+            http.fetchURL(homepageURL);
+
             int loginIdx = http.getResponseBuffer().indexOf("Username");
-            //logger.info("loginIdx is " + loginIdx);
             if (loginIdx != -1){
                 throw new RuntimeException("Found login prompt at index " + loginIdx + ", Login as " + username + ", " +
                                                         randomId + " failed.");
@@ -488,11 +461,7 @@
         String tag = RandomUtil.randomTagName(random);
         String post = "tag=" + tag + "&tagsearchsubmit=Submit";
         logger.finer("TagSearch: " + tagSearchURL + " Post: " + post);
-        
-        //logger.info("TagSearch: " + tagSearchURL + "Post: " + post);
         http.readURL(tagSearchURL, post);
-        
-        //no recirection for Java
         //if (http.getResponseCode() != 302)
         //    logger.warning("Tag search response not redirecting.");
         //for java, tagCloudURL and tagSearchURL are the same
@@ -521,7 +490,7 @@
         cycleType = CycleType.CYCLETIME,
         cycleMean = 5000,
         cycleMin = 3000,
-		truncateAtMin = false,
+        truncateAtMin = false,
         cycleDeviation = 2
     )
     public void doAddEvent() throws IOException {
@@ -529,50 +498,40 @@
         ctx.recordTime();
         http.readURL(addEventURL);
         loadStatics(addEventStatics);
-
-        StringBuilder buffer = new StringBuilder(256);
-        //MultipartPostMethod post = new MultipartPostMethod(fileUploadEventURL);
         if(isLoggedOn) {
+            // Prepare the parts for the request.
             ArrayList<Part> params = new ArrayList<Part>();
+            String[] parameters = prepareEvent();
+            if (parameters[0] == null || parameters[0].length() == 0)
+                logger.warning("Socialevent title is null!");
+            else
+                logger.finer("addEvent adding event title: " + parameters[0]);
 
-            params.add(new StringPart("title", RandomUtil.randomText(random, 15, 20))); //title
-            params.add(new StringPart("summary", RandomUtil.randomText(random, 20, 100))); // summary
-            params.add(new StringPart("description", RandomUtil.randomText(random, 50, 495))); // description
-            params.add(new StringPart("submitter_user_name", UserName.getUserName(random.random(1, ScaleFactors.users))));
-            params.add(new StringPart("telephone", RandomUtil.randomPhone(random, buffer))); //phone
-            DateFormat dateFormat = getDateFormat(); // eventtimestamp
-            String strDate = dateFormat.format( 
-                random.makeDateInInterval(BASE_DATE, 0, 540));                
-            StringTokenizer tk = new StringTokenizer(strDate,"-");
-            // The tokens are in order: year, month, day, hour, minute
-            params.add(new StringPart("year", tk.nextToken()));
-            params.add(new StringPart("month", tk.nextToken()));
-            params.add(new StringPart("day", tk.nextToken()));
-            params.add(new StringPart("hour", tk.nextToken()));
-            params.add(new StringPart("minute", tk.nextToken()));
-            params.add(new FilePart("upload_event_image", eventImg));
-            params.add(new FilePart("upload_event_literature",eventPdf));
-            params.add(new StringPart("submit", "Create"));
+            params.add(new StringPart("title", parameters[0])); //title
+            params.add(new StringPart("summary", parameters[1])); // summary
+            params.add(new StringPart("description", parameters[2])); // description
+            params.add(new StringPart("submitter_user_name", parameters[3]));
+            params.add(new StringPart("telephone", parameters[4])); //phone
+            params.add(new StringPart("year", parameters[6]));
+            params.add(new StringPart("month", parameters[7]));
+            params.add(new StringPart("day", parameters[8]));
+            params.add(new StringPart("hour", parameters[9]));
+            params.add(new StringPart("minute", parameters[10]));
+            params.add(new StringPart("tags", parameters[11]));
             
-            int numTags = random.random(1, 7); // Avg is 4 tags per event
-            for (int i = 0; i < numTags; i++)
-                tagSet.add(RandomUtil.randomTagId(random, 0.1d));
-
-            for (int tagId : tagSet)
-                tags.append(UserName.getUserName(tagId)).append(' ');
-            tags.setLength(tags.length() - 1);
-            params.add(new StringPart("tags", tags.toString()));
-            tags.setLength(0);
-            tagSet.clear();
-
+            //add the address
             String[] addressArr = prepareAddress();
-            params.add(new StringPart("street1",addressArr[0]));
-            params.add(new StringPart("street2",addressArr[1]));
+            params.add(new StringPart("street1", addressArr[0]));
+            params.add(new StringPart("street2", addressArr[1]));
             params.add(new StringPart("city", addressArr[2]));
             params.add(new StringPart("state", addressArr[3]));
             params.add(new StringPart("zip", addressArr[4]));
             params.add(new StringPart("country", addressArr[5]));
 
+            params.add(new FilePart("upload_event_image", eventImg));
+            params.add(new FilePart("upload_event_literature",eventPdf));
+            params.add(new StringPart("submit", "Create"));
+
             Part[] parts = new Part[params.size()];
             parts = params.toArray(parts);
 
@@ -593,11 +552,11 @@
         max90th = 3,
         timing  = Timing.MANUAL
     )
-    @NegativeExponential (
+    @NegativeExponential(
         cycleType = CycleType.CYCLETIME,
         cycleMean = 5000,
         cycleMin = 2000,
-		truncateAtMin = false,
+        truncateAtMin = false,
         cycleDeviation = 2
     )
     public void doAddPerson() throws IOException {
@@ -607,9 +566,7 @@
 
         ctx.recordTime();
         http.readURL(addPersonURL);
-       // http.readURL(fileUploadStatusURL);        
         loadStatics(addPersonStatics);
-
         // Prepare the parts for the request.
         ArrayList<Part> params = new ArrayList<Part>();
         String[] parameters = preparePerson();
@@ -617,18 +574,19 @@
         // Debug
         if (parameters[0] == null || parameters[0].length() == 0)
             logger.warning("Username is null!");
+        else
+            logger.finer("addPerson adding user: " + parameters[0]);
         
-        //logger.info("Username being added is " + parameters[0]);
         params.add(new StringPart("user_name", parameters[0]));
         params.add(new StringPart("password", parameters[1]));
         params.add(new StringPart("passwordx", parameters[1]));
         params.add(new StringPart("first_name", parameters[2]));
         params.add(new StringPart("last_name", parameters[3]));
-        params.add(new StringPart("email",parameters[4]));
+        params.add(new StringPart("email", parameters[4]));
         params.add(new StringPart("telephone",parameters[5]));
         String[] addressArr = prepareAddress();
-        params.add(new StringPart("street1",addressArr[0]));
-        params.add(new StringPart("street2",addressArr[1]));
+        params.add(new StringPart("street1", addressArr[0]));
+        params.add(new StringPart("street2", addressArr[1]));
         params.add(new StringPart("city", addressArr[2]));
         params.add(new StringPart("state", addressArr[3]));
         params.add(new StringPart("zip", addressArr[4]));
@@ -636,7 +594,6 @@
         params.add(new StringPart("summary", parameters[6]));
         params.add(new StringPart("timezone", parameters[7]));
         params.add(new FilePart("upload_person_image", personImg));
-        //params.add(new StringPart("user_thumbnail",personThumb);
 
         Part[] parts = new Part[params.size()];
         parts = params.toArray(parts);
@@ -647,7 +604,6 @@
         doMultiPartPost(post);        
 	    ctx.recordTime();
         ++driverMetrics.addPersonTotal;
-
     }
 
     @BenchmarkOperation (
@@ -662,15 +618,13 @@
             return;
         
         http.fetchURL(eventDetailURL + selectedEvent);
-        
         StringBuilder responseBuffer = http.getResponseBuffer();
-        
         if (responseBuffer.length() == 0)
             throw new IOException("Received empty response");
         boolean canAddAttendee = false;
         if (!jMakiComponentsUsed) {
             canAddAttendee = isLoggedOn &&
-                                responseBuffer.indexOf("Attend") != -1;
+                       responseBuffer.indexOf("Attend") != -1;
             if (!canAddAttendee && isLoggedOn) {
                 if (responseBuffer.indexOf("Login:") != -1) {
                     isLoggedOn = false;
@@ -683,7 +637,7 @@
         }
         
         Set<String> images = parseImages(responseBuffer);
-	loadStatics(eventDetailStatics);
+	    loadStatics(eventDetailStatics);
         loadImages(images);
         // If using jmaki components, we need to make two additional calls to polulate these
         // components
@@ -698,7 +652,8 @@
                 responseBuffer = http.getResponseBuffer();
                 // Creating the JSON object and checking the status is quite expensive
                 // So using a simpler approach.
-                if (responseBuffer.indexOf("not_attending") != -1 || responseBuffer.indexOf("deleted") != -1)
+                if (responseBuffer.indexOf("not_attending") != -1 ||
+                        responseBuffer.indexOf("deleted") != -1)
                     canAddAttendee = true;
             }
             else {
@@ -719,9 +674,8 @@
             driverMetrics.eventDetailImages += images.size();
             if (canAddAttendee) {
                 ++driverMetrics.addAttendeeReadyCount;
-                if (card == 0) {
+                if (card == 0)
                     ++driverMetrics.addAttendeeCount;
-                }
             }
         }
     }
@@ -734,6 +688,7 @@
     public void doPersonDetail() throws IOException {
         logger.finer("doPersonDetail");
         StringBuilder buffer = new StringBuilder(fileServiceURL.length() + 20);
+
 // TODO: account for new users when loading images, too.
         buffer.append(fileServiceURL).append("/p");
         int id = random.random(1, ScaleFactors.users);
@@ -745,11 +700,6 @@
             throw new IOException("Received empty response");
         Set<String> images = parseImages(responseBuffer);
         loadStatics(personStatics);
-        //logger.info("The buffer is before appending is " + buffer.toString() );
-        //logger.info("readURL is: " + buffer.toString() + id +".jpg"); 
-		/**
-        http.readURL(buffer.append(id).append(".jpg").toString());
-		*/
 		loadImages(images);
     }
 
@@ -764,8 +714,6 @@
 
     public Set<String> parseImages(StringBuilder buffer) {
         LinkedHashSet<String> urlSet = new LinkedHashSet<String>();
-        //String elementStart = "<img src=\"";
-        //int elementStartLen = elementStart.length();
         String elStart = "<img ";
         String attrStart = " src=\"";
         int elStartLen = elStart.length() - 1; // Don't include the trailing space
@@ -809,6 +757,11 @@
         return urlSet;
     }
 
+    /*
+	 * We assume that the application has set an expiry far into the future.
+	 * As such the browser would not re-fetch these images within the same
+	 * session.
+	 */
     private void loadImages(Set<String> images) throws IOException {
         if (images != null)
             for (String image : images) {
@@ -893,26 +846,11 @@
         return list.toArray(sa);
     }
 
-    private List<NameValuePair<String>> populatePosts(String[][] posts) {
-        List<NameValuePair<String>> returnList =
-                                    new ArrayList<NameValuePair<String>>();
-        for (String[] post : posts) {
-            NameValuePair<String> nvPair = new NameValuePair<String>();
-            nvPair.name = baseURL + post[0];
-            nvPair.value = post[1];
-            returnList.add(nvPair);
-        }
-        return returnList;
-    }
-
-    
     private String constructLoginPost(int randomId) {
         return "user_name=" + username + "&password=" +
                 String.valueOf(randomId);
     }
     
-      
-    
     public void doMultiPartPost(PostMethod post) throws IOException {
         HttpClient client = ((ApacheHC3Transport) http).getHttpClient();
         client.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
@@ -921,6 +859,7 @@
         // Need to manually follow redirects in HttpClient 3.0.1
         int status = client.executeMethod(post);
         Header locationHeader = post.getResponseHeader("location");
+
         if (locationHeader != null) {
             String redirectLocation = locationHeader.getValue();
             // Release the connection after we get the location, etc.
@@ -938,8 +877,8 @@
         
         int counter=0;
         fields[counter++] = RandomUtil.randomText(random, 15, 20); //title
-        fields[counter++] = RandomUtil.randomText(random, 50, 495); // summary
-        fields[counter++] = RandomUtil.randomText(random, 50, 495); // description
+        fields[counter++] = RandomUtil.randomText(random, 50, 100); // summary
+        fields[counter++] = RandomUtil.randomText(random, 100, 495); // description
         fields[counter++]= UserName.getUserName(random.random(1, ScaleFactors.users));
         fields[counter++]= RandomUtil.randomPhone(random, buffer); //phone
         fields[counter++]= RandomUtil.randomTimeZone(random); // timezone
@@ -951,14 +890,14 @@
             fields[counter++]=tk.nextToken();                        
         }
         //based on DateFormat,
-        //fields[5]=year
-        //fields[6]=month
-        //fields[7]=day
-        //fields[8]=hours
-        //fields[9]=minutes        
+        //fields[6]=year
+        //fields[7]=month
+        //fields[8]=day
+        //fields[9]=hours
+        //fields[10]=minutes
           int numTags = random.random(1, 7); // Avg is 4 tags per event
         for (int i = 0; i < numTags; i++)
-            while (!tagSet.add(RandomUtil.randomTagId(random, 0.1d)));
+            tagSet.add(RandomUtil.randomTagId(random, 0.1d));
 
         for (int tagId : tagSet)
             tags.append(UserName.getUserName(tagId)).append(' ');
@@ -1014,7 +953,6 @@
         int id = loadedUsers + personsAdded++ * ScaleFactors.activeUsers +
                                                         ctx.getThreadId() + 1;
         fields[0] = UserName.getUserName(id);
-        //logger.info("in prepare person - the id is "+ id + " for the username " + fields[0]);
         //use the same field for repeating the password field.
         fields[1] = String.valueOf(id);
         fields[2] = RandomUtil.randomName(random, b, 2, 12).toString();