com.sun.slamd.example
Class DigestMD5AuthRateJobClass

java.lang.Object
  extended byjava.lang.Thread
      extended bycom.sun.slamd.job.JobClass
          extended bycom.sun.slamd.example.DigestMD5AuthRateJobClass
All Implemented Interfaces:
java.lang.Runnable

public class DigestMD5AuthRateJobClass
extends JobClass

This class defines a SLAMD job that repeatedly performs SASL DIGEST-MD5 authentications against an LDAP directory server. It will find the user's entry based on a login ID, attempt to bind as that user using the SASL DIGEST-MD5 mechanism, and optionally verify whether that user is a member of a static group, dynamic group, or role.


Field Summary
static java.lang.String DEFAULT_LOG_ID_ATTR
          The default attribute used as the login ID.
static int MEMBERSHIP_TYPE_DYNAMIC
          The value used to indicate that an attempt will be made to determine whether the user is a member of a dynamic group.
static int MEMBERSHIP_TYPE_NONE
          The value used to indicate that no membership determination will be made.
static int MEMBERSHIP_TYPE_ROLE
          The value used to indicate that an attempt will be made to determine whether the user is a member of a role.
static int MEMBERSHIP_TYPE_STATIC
          The value used to indicate that an attempt will be made to determine whether the user is a member of a static group.
static java.lang.String[] NO_ATTRS
          The set of attributes to retrieve if there aren't any attributes to retrieve.
static java.lang.String ROLE_ATTR
          The name of the LDAP attribute that contains the DNs of the roles to which a user belongs.
static java.lang.String SSL_KEY_PASSWORD_PROPERTY
          The system property used to specify the password for the JSSE key store.
static java.lang.String SSL_KEY_STORE_PROPERTY
          The system property used to specify the location of the JSSE key store.
static java.lang.String SSL_TRUST_PASSWORD_PROPERTY
          The system property used to specify the password for the JSSE trust store.
static java.lang.String SSL_TRUST_STORE_PROPERTY
          The system property used to specify the location of the JSSE trust store.
static java.lang.String STAT_TRACKER_AUTHENTICATION_ATTEMPTS
          The name of the stat tracker that will be used to count the number of authentication attempts.
static java.lang.String STAT_TRACKER_AUTHENTICATION_TIME
          The name of the stat tracker that will be used to keep track of the time required to perform each authentication.
static java.lang.String STAT_TRACKER_FAILED_AUTHENTICATIONS
          The name of the stat tracker that will be used to count the number of failed authentications.
static java.lang.String STAT_TRACKER_SUCCESSFUL_AUTHENTICATIONS
          The name of the stat tracker that will be used to count the number of successful authentications.
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
DigestMD5AuthRateJobClass()
          Creates a new instance of this job thread.
 
Method Summary
 void destroy()
          Attempts to force this thread to exit by closing the connections to the directory server and setting them to null.
 void finalizeClient()
          Performs any per-client finalization that should be done for this job.
 java.lang.String getJobCategoryName()
          Retrieves the name of the category in which this job class exists.
 java.lang.String getJobDescription()
          Returns a description of this job that can be seen in the administrative interface.
 java.lang.String getJobName()
          Returns the user-friendly name that is to be used for this job class in the administrative interface.
 java.lang.String[] getLoginInfo()
          Retrieves an array containing the login ID and password that should be used to authenticate to the directory.
 ParameterList getParameterStubs()
          Returns the set of parameters whose value may be specified by the end user.
 StatTracker[] getStatTrackers()
          Retrieves the set of stat trackers that are maintained by this job class.
 StatTracker[] getStatTrackerStubs(java.lang.String clientID, java.lang.String threadID, int collectionInterval)
          Retrieves the set of stat trackers that will be maintained by this job class.
 void initializeClient(java.lang.String clientID, ParameterList parameters)
          Performs initialization for this job on each client immediately before each thread is created to actually run the job.
 void initializeThread(java.lang.String clientID, java.lang.String threadID, int collectionInterval, ParameterList parameters)
          Initializes this job class with the information that it will use when actually running the job.
 boolean isMember(netscape.ldap.LDAPEntry userEntry)
          Determines whether the provided user is a member of the membership DN.
 boolean providesParameterTest()
          Indicates whether this job class implements logic that makes it possible to test the validity of job parameters before scheduling the job for execution (e.g., to see if the server is reachable using the information provided).
 void runJob()
          Performs the work of actually running the job.
 boolean testJobParameters(ParameterList parameters, java.util.ArrayList outputMessages)
          Provides a means of testing the provided job parameters to determine whether they are valid (e.g., to see if the server is reachable) before scheduling the job for execution.
 void validateJobInfo(int numClients, int threadsPerClient, int threadStartupDelay, java.util.Date startTime, java.util.Date stopTime, int duration, int collectionInterval, ParameterList parameters)
          Provides a means of validating the information used to schedule the job, including the scheduling information and list of parameters.
 
Methods inherited from class com.sun.slamd.job.JobClass
enableRealTimeStats, finalizeJob, finalizeThread, getActiveThreadCount, getClientID, getClientNumber, getClientSideJob, getClientSideParameterStubs, getCollectionInterval, getJobID, getScheduledDuration, getShouldStopTime, getStatReporter, getThreadID, getThreadNumber, indicateCompletedWithErrors, indicateStoppedDueToError, initializeJob, initializeJobThread, isDeprecated, isRunning, logMessage, overrideCollectionInterval, overrideNumClients, overrideThreadsPerClient, run, setClientNumber, setClientSideJob, setThreadNumber, shouldStop, stackTraceToString, startJob, stopAndWait, stopJob, stopRequested, writeVerbose
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, countStackFrames, currentThread, dumpStack, enumerate, getContextClassLoader, getName, getPriority, getThreadGroup, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setName, setPriority, sleep, sleep, start, stop, stop, suspend, toString, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

MEMBERSHIP_TYPE_NONE

public static final int MEMBERSHIP_TYPE_NONE
The value used to indicate that no membership determination will be made.

See Also:
Constant Field Values

MEMBERSHIP_TYPE_STATIC

public static final int MEMBERSHIP_TYPE_STATIC
The value used to indicate that an attempt will be made to determine whether the user is a member of a static group.

See Also:
Constant Field Values

MEMBERSHIP_TYPE_DYNAMIC

public static final int MEMBERSHIP_TYPE_DYNAMIC
The value used to indicate that an attempt will be made to determine whether the user is a member of a dynamic group.

See Also:
Constant Field Values

MEMBERSHIP_TYPE_ROLE

public static final int MEMBERSHIP_TYPE_ROLE
The value used to indicate that an attempt will be made to determine whether the user is a member of a role.

See Also:
Constant Field Values

DEFAULT_LOG_ID_ATTR

public static final java.lang.String DEFAULT_LOG_ID_ATTR
The default attribute used as the login ID.

See Also:
Constant Field Values

ROLE_ATTR

public static final java.lang.String ROLE_ATTR
The name of the LDAP attribute that contains the DNs of the roles to which a user belongs.

See Also:
Constant Field Values

SSL_KEY_STORE_PROPERTY

public static final java.lang.String SSL_KEY_STORE_PROPERTY
The system property used to specify the location of the JSSE key store.

See Also:
Constant Field Values

SSL_KEY_PASSWORD_PROPERTY

public static final java.lang.String SSL_KEY_PASSWORD_PROPERTY
The system property used to specify the password for the JSSE key store.

See Also:
Constant Field Values

SSL_TRUST_STORE_PROPERTY

public static final java.lang.String SSL_TRUST_STORE_PROPERTY
The system property used to specify the location of the JSSE trust store.

See Also:
Constant Field Values

SSL_TRUST_PASSWORD_PROPERTY

public static final java.lang.String SSL_TRUST_PASSWORD_PROPERTY
The system property used to specify the password for the JSSE trust store.

See Also:
Constant Field Values

STAT_TRACKER_AUTHENTICATION_ATTEMPTS

public static final java.lang.String STAT_TRACKER_AUTHENTICATION_ATTEMPTS
The name of the stat tracker that will be used to count the number of authentication attempts.

See Also:
Constant Field Values

STAT_TRACKER_AUTHENTICATION_TIME

public static final java.lang.String STAT_TRACKER_AUTHENTICATION_TIME
The name of the stat tracker that will be used to keep track of the time required to perform each authentication.

See Also:
Constant Field Values

STAT_TRACKER_FAILED_AUTHENTICATIONS

public static final java.lang.String STAT_TRACKER_FAILED_AUTHENTICATIONS
The name of the stat tracker that will be used to count the number of failed authentications.

See Also:
Constant Field Values

STAT_TRACKER_SUCCESSFUL_AUTHENTICATIONS

public static final java.lang.String STAT_TRACKER_SUCCESSFUL_AUTHENTICATIONS
The name of the stat tracker that will be used to count the number of successful authentications.

See Also:
Constant Field Values

NO_ATTRS

public static final java.lang.String[] NO_ATTRS
The set of attributes to retrieve if there aren't any attributes to retrieve.

Constructor Detail

DigestMD5AuthRateJobClass

public DigestMD5AuthRateJobClass()
Creates a new instance of this job thread. This constructor does not need to do anything other than invoke the constructor for the superclass.

Method Detail

getJobName

public java.lang.String getJobName()
Returns the user-friendly name that is to be used for this job class in the administrative interface.

Specified by:
getJobName in class JobClass
Returns:
The user-friendly name for this job class.

getJobDescription

public java.lang.String getJobDescription()
Returns a description of this job that can be seen in the administrative interface.

Specified by:
getJobDescription in class JobClass
Returns:
A description of this job class.

getJobCategoryName

public java.lang.String getJobCategoryName()
Retrieves the name of the category in which this job class exists. This is used to help arrange the job classes in the administrative interface.

Overrides:
getJobCategoryName in class JobClass
Returns:
The name of the category in which this job class exists.

getParameterStubs

public ParameterList getParameterStubs()
Returns the set of parameters whose value may be specified by the end user.

Specified by:
getParameterStubs in class JobClass
Returns:
The set of configurable parameters for this job class.

getStatTrackerStubs

public StatTracker[] getStatTrackerStubs(java.lang.String clientID,
                                         java.lang.String threadID,
                                         int collectionInterval)
Retrieves the set of stat trackers that will be maintained by this job class. The stat trackers returned by this method do not have to actually contain any statistics -- the display name and stat tracker class should be the only information that callers of this method should rely upon. Note that this list can be different from the list of statistics actually collected by the job in some cases (e.g., if the job may not return all the stat trackers it advertises in all cases, or if the job may return stat trackers that it did not advertise), but it is a possibility that only the stat trackers returned by this method will be accessible for some features in the SLAMD server.

Specified by:
getStatTrackerStubs in class JobClass
Parameters:
clientID - The client ID that should be used for the returned stat trackers.
threadID - The thread ID that should be used for the returned stat trackers.
collectionInterval - The collection interval that should be used for the returned stat trackers.
Returns:
The set of stat trackers that will be maintained by this job class.

getStatTrackers

public StatTracker[] getStatTrackers()
Retrieves the set of stat trackers that are maintained by this job class.

Specified by:
getStatTrackers in class JobClass
Returns:
The set of stat trackers for this job class.

validateJobInfo

public void validateJobInfo(int numClients,
                            int threadsPerClient,
                            int threadStartupDelay,
                            java.util.Date startTime,
                            java.util.Date stopTime,
                            int duration,
                            int collectionInterval,
                            ParameterList parameters)
                     throws InvalidValueException
Provides a means of validating the information used to schedule the job, including the scheduling information and list of parameters.

Overrides:
validateJobInfo in class JobClass
Parameters:
numClients - The number of clients that should be used to run the job.
threadsPerClient - The number of threads that should be created on each client to run the job.
threadStartupDelay - The delay in milliseconds that should be used when starting the client threads.
startTime - The time that the job should start running.
stopTime - The time that the job should stop running.
duration - The maximum length of time in seconds that the job should be allowed to run.
collectionInterval - The collection interval that should be used when gathering statistics for the job.
parameters - The set of parameters provided to this job that can be used to customize its behavior.
Throws:
InvalidValueException - If the provided information is not appropriate for running this job.

providesParameterTest

public boolean providesParameterTest()
Indicates whether this job class implements logic that makes it possible to test the validity of job parameters before scheduling the job for execution (e.g., to see if the server is reachable using the information provided).

Overrides:
providesParameterTest in class JobClass
Returns:
true if this job provides a means of testing the job parameters, or false if not.

testJobParameters

public boolean testJobParameters(ParameterList parameters,
                                 java.util.ArrayList outputMessages)
Provides a means of testing the provided job parameters to determine whether they are valid (e.g., to see if the server is reachable) before scheduling the job for execution. This method will be executed by the SLAMD server system itself and not by any of the clients.

Overrides:
testJobParameters in class JobClass
Parameters:
parameters - The job parameters to be tested.
outputMessages - The lines of output that were generated as part of the testing process. Each line of output should be added to this list as a separate string, and empty strings (but not null values) are allowed to provide separation between different messages. No formatting should be provided for these messages, however, since they may be displayed in either an HTML or plain text interface.
Returns:
true if the test completed successfully, or false if not. Note that even if the test did not complete successfully, the user will be presented with a warning but will still be allowed to schedule the job using the provided parameters. This is necessary because the parameters may still be valid even if the server couldn't validate them at the time the job was scheduled (e.g., if the server wasn't running or could not be reached by the SLAMD server even though it could be by the clients).

initializeClient

public void initializeClient(java.lang.String clientID,
                             ParameterList parameters)
                      throws UnableToRunException
Performs initialization for this job on each client immediately before each thread is created to actually run the job.

Overrides:
initializeClient in class JobClass
Parameters:
clientID - The ID assigned to the client running this job.
parameters - The set of parameters provided to this job that can be used to customize its behavior.
Throws:
UnableToRunException - If the client initialization could not be completed successfully and the job is unable to run.

initializeThread

public void initializeThread(java.lang.String clientID,
                             java.lang.String threadID,
                             int collectionInterval,
                             ParameterList parameters)
                      throws UnableToRunException
Initializes this job class with the information that it will use when actually running the job. This will also initialize the stat trackers used by the job.

Specified by:
initializeThread in class JobClass
Parameters:
clientID - The thread ID for this thread.
threadID - The thread ID for this thread.
collectionInterval - The collection interval to use for gathering statistics while processing the job.
parameters - The st of parameters that contain the information used to customize the way this job is processed.
Throws:
UnableToRunException - If a problem occurs that prevents the thread from being able to run properly.

runJob

public void runJob()
Performs the work of actually running the job. When this method completes, the job will be done.

Specified by:
runJob in class JobClass

destroy

public void destroy()
Attempts to force this thread to exit by closing the connections to the directory server and setting them to null.

Overrides:
destroy in class JobClass

finalizeClient

public void finalizeClient()
Performs any per-client finalization that should be done for this job. In this case, if the job was using shared connections then those connections will be closed.

Overrides:
finalizeClient in class JobClass

isMember

public boolean isMember(netscape.ldap.LDAPEntry userEntry)
Determines whether the provided user is a member of the membership DN.

Parameters:
userEntry - The user entry for which to make the determination.
Returns:
true if it is determined that the user is a member, or false if the membership could not be determined.

getLoginInfo

public java.lang.String[] getLoginInfo()
Retrieves an array containing the login ID and password that should be used to authenticate to the directory.

Returns:
An array containing the login ID and password.