sebb        2004/06/10 08:21:15

  Modified:    src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler Tag:
                        rel-2_0 TCPSampler.java
  Log:
  Added: status extraction; property file for translation statuses
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.5.2.3   +85 -7     
jakarta-jmeter/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/TCPSampler.java
  
  Index: TCPSampler.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/TCPSampler.java,v
  retrieving revision 1.5.2.2
  retrieving revision 1.5.2.3
  diff -u -r1.5.2.2 -r1.5.2.3
  --- TCPSampler.java   2 Apr 2004 22:56:50 -0000       1.5.2.2
  +++ TCPSampler.java   10 Jun 2004 15:21:14 -0000      1.5.2.3
  @@ -18,6 +18,9 @@
   
   package org.apache.jmeter.protocol.tcp.sampler;
   
  +import java.io.File;
  +import java.io.FileInputStream;
  +import java.io.FileNotFoundException;
   import java.io.IOException;
   import java.io.InputStream;
   import java.io.OutputStream;
  @@ -27,6 +30,7 @@
   import java.util.HashSet;
   import java.util.Iterator;
   import java.util.Map;
  +import java.util.Properties;
   import java.util.Set;
   
   import org.apache.jmeter.config.ConfigTestElement;
  @@ -61,6 +65,38 @@
   
        private static Set allSockets = new HashSet();// Keep track of connections to 
allow close
   
  +     // If set, this is the regex that is used to extract the status from the 
response
  +     //NOT implemented yet private final static String STATUS_REGEX = 
JMeterUtils.getPropDefault("tcp.status.regex","");
  +     
  +     // Otherwise, the response is scanned for these strings
  +     private final static String STATUS_PREFIX = 
JMeterUtils.getPropDefault("tcp.status.prefix","");
  +     private final static String STATUS_SUFFIX = 
JMeterUtils.getPropDefault("tcp.status.suffix","");
  +     
  +     private final static String STATUS_PROPERTIES = 
JMeterUtils.getPropDefault("tcp.status.properties","");
  +     private final static Properties statusProps = new Properties();
  +     private static boolean haveStatusProps = false;
  +     
  +     static
  +     {
  +             log.info("Protocol Handler name="+getClassname());
  +             log.info("Status prefix="+STATUS_PREFIX);
  +             log.info("Status suffix="+STATUS_SUFFIX);
  +             log.info("Status properties="+STATUS_PROPERTIES);
  +             if (STATUS_PROPERTIES.length()>0)
  +             {
  +             File f = new File(STATUS_PROPERTIES);
  +             try {
  +                             statusProps.load(new FileInputStream(f));
  +                             log.info("Successfully loaded properties");
  +                             haveStatusProps = true;
  +                     } catch (FileNotFoundException e) {
  +                             log.info("Property file not found");
  +                     } catch (IOException e) {
  +                             log.info("Property file error "+e.toString());
  +                     }
  +             }
  +     }
  +    
        /** the cache of TCP Connections */
        private static ThreadLocal tp = new ThreadLocal(){
                protected Object initialValue(){
  @@ -74,6 +110,8 @@
        {
                log.debug("Created "+this);
                protocolHandler=getProtocol();
  +             log.debug("Using Protocol Handler: "
  +                             +protocolHandler.getClass().getName());
        }
   
        private String getError(){
  @@ -196,7 +234,7 @@
           return ("tcp://" + this.getServer() + ":" + this.getPort());//$NON-NLS-1$
       }
   
  -     private String getClassname()
  +     private static String getClassname()
        {
                String className = 
JMeterUtils.getPropDefault("tcp.handler","TCPClientImpl");
                return className;
  @@ -276,6 +314,33 @@
                    res.setResponseCode("200");
                    res.setResponseMessage("OK");
                    isSuccessful = true;
  +                 //Reset the status code if the message contains one
  +                 if (STATUS_PREFIX.length() > 0)
  +                 {
  +                     int i = in.indexOf(STATUS_PREFIX);
  +                     int j = in.indexOf(STATUS_SUFFIX,i+STATUS_PREFIX.length());
  +                     if (i != -1 && j > i)
  +                     {
  +                             String rc = in.substring(i+STATUS_PREFIX.length(),j);
  +                             res.setResponseCode(rc);
  +                             isSuccessful = checkResponseCode(rc);
  +                             if (haveStatusProps)
  +                             {
  +                                     res.setResponseMessage(
  +                                                     
statusProps.getProperty(rc,"Status code not found in properties"));
  +                             }
  +                             else
  +                             {
  +                                     res.setResponseMessage("No status property 
file");
  +                             }
  +                     }
  +                     else
  +                     {
  +                             res.setResponseCode("999");
  +                         res.setResponseMessage("Status value not found");
  +                         isSuccessful=false;
  +                     }
  +                 } 
                        }
           }
           catch (Exception ex)
  @@ -294,7 +359,23 @@
           return res;
       }
   
  -     private void disconnectAll(){
  +     /**
  +      * @param rc response code
  +      * @return whether this represents success or not
  +      */
  +     private boolean checkResponseCode(String rc) {
  +             if (rc.compareTo("400")>=0 && rc.compareTo("499")<=0)
  +             {
  +                     return false;
  +             }
  +             if (rc.compareTo("500")>=0 && rc.compareTo("599")<=0)
  +             {
  +                     return false;
  +             }
  +             return true;
  +     }
  +
  +     private void disconnectAll(){
                synchronized (allSockets)
                {
                        Iterator i = allSockets.iterator();
  @@ -322,8 +403,6 @@
         public void testStarted() // Only called once per class?
         {
                 log.debug(this+" test started");
  -              // TODO Auto-generated method stub
  -        
         }
   
       /* (non-Javadoc)
  @@ -333,7 +412,6 @@
       {
                log.debug(this+" test ended");
                disconnectAll();
  -        
       }
   
       /* (non-Javadoc)
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to