Input/Output Device Driver Reference/APM IOCtl Device Driver Test Tool

APM IOCtl Device Driver Test Tool
This chapter explains the APM IOCtl Device Driver Test Tool.

Overview
The APM IOCtl Functional Verification Tests (FVTs) exercise the Application Program Interfaces (APIs) defined for the DosDevIOCtl interface of the APM device driver. The tests are implemented with the Device Driver Test Tool (DDTT). Each test is defined in a script file and these files can be modified using a text editor to create additional, specialized test cases. The test scripts give the user a repeatable set of tests that demonstrate APM function and performance. Errors are reported and are easily isolated to a specific test sequence and API.

User input and output from each thread of the APM tests is by way of a separate Presentation Manager window. Multi-threaded test cases log all information to a single log file, clearly indicating the actual execution sequence in the event of errors.

APM IOCtl Test Architecture
The DDTT provides a common front-parser for test case scripts and also tests several devices and APIs. The following DDTT APM IOCtl-specific stub code and grammar files are required: The VisualAge C++ source code DDTAPM.DLL is available on the IBM Developer Connection Device Driver Kit for OS/2. The following required, common components of DDTT implement DDTT's programmable parser and common test functions such as SET, LOOP, and PAUSE:
 * DDTAPM.DLL
 * APM.GRA
 * DDTT.EXE
 * DDTT.DLL
 * GLOBAL.DLL
 * GLOBAL.GRA

Installation
There are two directory structures in IBM Developer Connection Device Driver Kit for OS/2 that utilize test suites. The TESTCERT substructure contains the executables and test cases.

The following procedure describes the installation steps for running test cases:

1. Copy the executable and APM IOCtl test case files from the IBM Developer Connection Device Driver Kit for OS/2 CD-ROM to the hard drive. All the executable (.EXE and .DLL) files can reside in one directory, such as \TSTAPM. Test-case script and command files can also be placed in this directory on the hard disk. If the target directory is C:\TSTAPM and the E drive contains the information from the IBM Developer Connection Device Driver Kit for OS/2 CD-ROM, then use the following commands to copy the APM IOCtl test suite: [C:\]md tstapm [C:\]cd tstapm [C:\tstapm]copy e:\ddk\testcert\apm\function\* [C:\tstapm]copy e:\ddk\testcert\general\ddtt\* 2. Make sure the statement BASEDEV=APM.SYS is in the CONFIG.SYS file and the driver is installed correctly.

Test-Case Execution
There are two different ways to run APM tests. One way is to run the program from a command file. To run the command file, first make sure you are in the directory in which the files were installed and then type TEST. The command file will run all of the script files. However, if you would like to test certain parts of the driver, then you need to execute the corresponding test script. For instance, in order to test the function 61 you need to type, 61.CMD.

Another way to run APM IOCtl tests is to run each script file individually. To run one script file at a time, see for a description of each script file. After deciding on a script file to run, type in DDTT followed by the script file name: [C:\tstapm]DDTT ENABLE01.SCR After the script has finished executing, control will transfer back to the OS/2 window.

APM IOCtl Test Grammar Function Calls
The following is a list of APM IOCtl Test Grammar Function Calls:
 * APM_OPEN
 * APM_CLOSE
 * APM_0C40
 * APM_0C41
 * APM10_0C60
 * APM_0C60
 * APM_0C61
 * APM_0C62
 * APM_0C63
 * APM_SEM
 * APM_ENDSEM
 * APM_CREATETHREAD
 * APM_POLLQUEUE
 * DATA_COMPARE

APM_OPEN
This function opens the advanced power management driver.


 * Input Parameter Keywords


 * Output Parameter Keywords

None.
 * Logged Data

APM_CLOSE
This function closes the advanced power management driver.


 * Input Parameter Keywords
 * Output Parameter Keywords:None.
 * Logged Data:None.

APM_0C40
Category 0Ch Function 40h - Send Power Event

This function enables the caller to initiate a power management event through the power management services subsystem and system clients.


 * Input Parameter Keywords

None.
 * Output Parameter Keywords

None.
 * Logged Data

APM_0C41
Category 0Ch Function 41h - Set Power Event Resource

This function enables the caller to manipulate the resource set used to communicate with the power management subsystem. The parameter fields enable the caller to customize the resource set to fit the communication protocol desired.


 * Input Parameter Keywords

None.
 * Output Parameter Keywords

None.
 * Logged Data

APM_0C60
Category 0Ch Function 60h - Query Power Status

This function returns the current power state information for the system and system devices.


 * Input Parameter Keywords

None.
 * Output Parameter Keywords


 * Logged Data
 * Power Flags
 * AC Status
 * Battery Life
 * Battery Time
 * Battery Time Form
 * Battery Status

APM10_0C60
Category 0Ch Function 60h - Query Power Status APM Version 1.0

This function returns the current power state information for the system and system devices.


 * Input Parameter Keywords

None.
 * Output Parameter Keywords


 * Logged Data
 * Power Flags
 * AC Status
 * Battery Life
 * Battery Status

APM_0C61
Category 0Ch Function 61h - Query Power Event

This function returns power management event information queued in the power management services subsystem.


 * Input Parameter Keywords

None.
 * Output Parameter Keywords


 * Logged Data
 * Data Packet Format
 * Message Count
 * SubID
 * DevID
 * Power State

APM_0C62
Category 0Ch Function 62h - Query Power Information

This function returns the power management subsystem and bios configuration information.


 * Input Parameter Keywords

None.
 * Output Parameter Keywords


 * Logged Data
 * BIOS Flags
 * BIOS Version
 * SubSystem Version

APM_0C63
Category 0Ch Function 63h - Query Power State

This function allows the current power state of device, class of device, or the entire system to be queried.


 * Input Parameter Keywords

None.
 * Output Parameter Keywords


 * Logged Data
 * Power State

APM_SEM
This function creates a semaphore handle.

None.
 * Input Parameter Keywords


 * Output Parameter Keywords

None.
 * Logged Data

APM_ENDSEM
This function deletes a semaphore handle.


 * Input Parameter Keywords

None.
 * Output Parameter Keywords

None.
 * Logged Data

APM_CREATETHREAD
This function is designed to test function 61 using semaphore notification. Two threads are created for this purpose. The main thread generates the event (by a function 40 call) then goes idle for 100 milliseconds and then checks if the event is picked up by the child thread. If the event is not picked up by the child thread, the main thread goes back into idle again and repeats the same process. In the mean time, the child thread waits on a semaphore. It is notified when the event is created. Then the child thread picks up the event (by a function 61 call). This cycle is repeated for max_count times. In general, max_count does not need to be greater than 1. When the main thread finishes its work, it waits for the child thread to complete its execution and then it terminates.


 * Input Parameter Keywords

None.
 * Output Parameter Keywords

None.
 * Logged Data

APM_POLLQUEUE
This function is designed to test function 61 without using semaphore notification. Two threads are created for this purpose. The main thread generates the event (function 40) and goes idle for 100 milliseconds and then checks if the event is picked up by the child running in parallel. If it is not picked up by the child thread then the main thread goes back to idle end repeats the same process. The child thread continuously polls the queue and when it retrieves an event from the queue, it notifies the main thread. The main thread repeats this cycle for max_count times. In general, max_count does not need to be greater than 1. When the main thread is done, it waits for the child thread to complete its execution and it terminates.


 * Input Parameter Keywords

None.
 * Output Parameter Keywords

None.
 * Logged Data

DATA_COMPARE
This function is to compare the actual result to the expected result.


 * Input Parameter Keywords

None.
 * Output Parameter Keywords

SUCCESS or ERROR
 * Logged Data

Description of Test Cases
Each of the APM IOCtl test cases can be executed individually as previously described. The corresponding test scripts are described below. The user can create additional tests or combine tests into logically organized test groups to test certain aspects of the driver, after becoming familiar with the DDTT and the APM IOCtl grammar files.

All of the APM IOCtl test cases use the DDTT @IMPORT command to include APM_RET.SCR which contains the return codes from the IOCtl calls.

All test scripts close the APM device driver and verify successful status return from every exercised API. All test scripts log information to a log file with the same file name and a file name extension, .LOG. The same information is also written to DDTT's output windows. Log files can be examined after the test case has completed.


 * APM_RET.SCR:A common script included by all scripts that contains the error codes returned by the IOCtl calls.
 * ENABLE01.SCR:Enables power management functions for BIOS-managed devices.
 * ENABLE0.SCR:Enables power management functions for system BIOS.
 * ENABLE1.SCR:Enables power management functions for display devices.
 * ENABLE2.SCR:Enables power management functions for secondary storage devices.
 * ENABLE3.SCR:Enables power management functions for parallel ports.
 * ENABLE4.SCR:Enables power management functions for serial ports.
 * ENABLE6.SCR:Enables power management functions for PCMCIA sockets.
 * DISABL01.SCR:Disables power management functions for BIOS-managed devices.
 * DISABLE0.SCR:Disables power management functions for system BIOS.
 * DISABLE1.SCR:Disables power management functions for display devices.
 * DISABLE2.SCR:Disables power management functions for secondary storage devices.
 * DISABLE3.SCR:Disables power management functions for parallel ports.
 * DISABLE4.SCR:Disables power management functions for serial ports.
 * DISABLE6.SCR:Disables power management functions for PCMCIA sockets.
 * ENGAGE01.SCR:Engages power management functions so that cooperative power management between BIOS and the operating system takes place for the BIOS-managed devices.
 * ENGAGE0.SCR:Engages power management functions so that cooperative power management between BIOS and the operating system takes place for the system BIOS.
 * ENGAGE1.SCR:Engages power management functions so that cooperative power management between BIOS and the operating system takes place for the display devices.
 * ENGAGE2.SCR:Engages power management functions so that cooperative power management between BIOS and the operating system takes place for the secondary storage devices.
 * ENGAGE3.SCR:Engages power management functions so that cooperative power management between BIOS and the operating system takes place for parallel ports.
 * ENGAGE4.SCR:Engages power management functions so that cooperative power management between BIOS and the operating system takes place for serial ports.
 * ENGAGE6.SCR:Engages power management functions so that cooperative power management between BIOS and the operating system takes place for the PCMCIA sockets.
 * DISENG01.SCR:Disengages power management functions therefore BIOS will be automatically performing power management without operating system cooperation for all BIOS-managed devices.
 * DISENG0.SCR:Disengages power management functions therefore BIOS will be automatically performing power management without operating system cooperation for itself.
 * DISENG1.SCR:Disengages power management functions therefore BIOS will be automatically performing power management without operating system cooperation for display devices.
 * DISENG2.SCR:Disengages power management functions therefore BIOS will be automatically performing power management without operating system cooperation for secondary storage devices.
 * DISENG3.SCR:Disengages power management functions therefore BIOS will be automatically performing power management without operating system cooperation for parallel ports.
 * DISENG4.SCR:Disengages power management functions therefore BIOS will be automatically performing power management without operating system cooperation for serial ports.
 * DISENG6.SCR:Disengages power management functions therefore BIOS will be automatically performing power management without operating system cooperation for PCMCIA sockets.
 * RESTORE.SCR:Restores the BIOS defaults.
 * SBMDOFF.SCR:Sets the power of system BIOS-managed devices to off.
 * SBMDRDY.SCR:Sets the power of system BIOS-managed devices to ready.
 * SBMDSBY.SCR:Sets the power of system BIOS-managed devices to standby.
 * SBMDSPD.SCR:Sets the power of system BIOS-managed devices to suspend.
 * SBIOSOFF.SCR:Sets the power of the system BIOS to off.
 * SBIOSRDY.SCR:Sets the power of the system BIOS to ready.
 * SBIOSSBY.SCR:Sets the power of the system BIOS to standby.
 * SBIOSSPD.SCR:Sets the power of the system BIOS to suspend.
 * SDSPLOFF.SCR:Sets the power of display devices to off.
 * SDSPLRDY.SCR:Sets the power of display devices to ready.
 * SDSPLSBY.SCR:Sets the power of display devices to standby.
 * SDSPLSPD.SCR:Sets the power of Display Devices to suspend.
 * SSTGOFF.SCR:Sets the power of secondary storage devices to off.
 * SSTGRDY.SCR:Sets the power of secondary storage devices to ready.
 * SSTGSBY.SCR:Sets the power of secondary storage devices to standby.
 * SSTGSPD.SCR:Sets the power of secondary storage devices to suspend.
 * SPPRTOFF.SCR:Sets the power of parallel ports to off.
 * SPPRTRDY.SCR:Sets the power of parallel ports to ready.
 * SPPRTSBY.SCR:Sets the power of parallel ports to standby.
 * SPPRTSPD.SCR:Sets the power of parallel ports to suspend.
 * SSPRTOFF.SCR:Sets the power of serial ports to off.
 * SSPRTRDY.SCR:Sets the power of serial ports to ready.
 * SSPRTSBY.SCR:Sets the power of serial ports to standby.
 * SSPRTSPD.SCR:Sets the power of serial ports to suspend.
 * SPCMCOFF.SCR:Sets the power of PCMCIA sockets to off.
 * SPCMCRDY.SCR:Sets the power of PCMCIA sockets to ready.
 * SPCMCSBY.SCR:Sets the power of PCMCIA sockets to standby.
 * SPCMCSPD.SCR:Sets the power of PCMCIA sockets to suspend.
 * 41ERROR1.SCR:Error case. Attempts to set up a semaphore without providing a semaphore type.
 * 41ERROR2.SCR:Error case. Requests a semaphore setup and removal at the same time.
 * 41ERROR3.SCR:Error case. Attempts to set up both a 32-bit and 16-bit semaphore at the same time.
 * 41ERROR4.SCR:Error case. Attempts to set up a semaphore while NoSemFlag is set.
 * 41ERROR5.SCR:Error case. Attempts to set up a semaphore despite the case that there already exists one.
 * 41ERROR6.SCR:Error case. Bad semaphore handle.
 * 41ERROR7.SCR:Error case. Attempts to remove a semaphore which was not set up.
 * 41ERROR8.SCR:Error case. An invalid event mask is used while setting the resource set.
 * 41SEMREM.SCR:Removes an already set up semaphore.
 * QPOWEN01.SCR:Returns the enable power management event information queued in the Power Management Services subsystem for system BIOS-managed devices (semaphore implementation).
 * QPOWEEN0.SCR:Returns the enable power management event information queued in the Power Management Services subsystem for system BIOS (semaphore implementation).
 * QPOWEEN1.SCR:Returns the enable power management event information queued in the Power Management Services subsystem for display devices (semaphore implementation).
 * QPOWEEN2.SCR:Returns the enable power management event information queued in the Power Management Services subsystem for secondary storage devices (semaphore implementation).
 * QPOWEEN3.SCR:Returns the enable power management event information queued in the Power Management Services subsystem for parallel ports (semaphore implementation).
 * QPOWEEN4.SCR:Returns the enable power management event information queued in the Power Management Services subsystem for serial ports (semaphore implementation).
 * QPOWEEN6.SCR:Returns the enable power management event information queued in the Power Management Services subsystem for PCMCIA Sockets (semaphore implementation).
 * QPWDIS01.SCR:Returns the disable power management event information queued in the Power Management Services subsystem for system BIOS-managed device drivers (semaphore implementation).
 * QPOWDIS0.SCR:Returns the disable power management event information queued in the Power Management Services subsystem for system BIOS (semaphore implementation).
 * QPOWDIS1.SCR:Returns the disable power management event information queued in the Power Management Services subsystem for display devices (semaphore implementation).
 * QPOWDIS2.SCR:Returns the disable power management event information queued in the Power Management Services subsystem for secondary storage devices ( semaphore implementation).
 * QPOWDIS3.SCR:Returns the disable power management event information queued in the Power Management Services subsystem for parallel ports (semaphore implementation).
 * QPOWDIS4.SCR:Returns the disable power management event information queued in the Power Management Services subsystem for serial ports (semaphore implementation).
 * QPOWDIS6.SCR:Returns the disable power management event information queued in the Power Management Services subsystem for PCMCIA sockets (semaphore implementation).
 * QPWENG01.SCR:Returns the engage power management event information queued in the Power Management Services subsystem for System BIOS-managed devices (semaphore implementation).
 * QPOWENG0.SCR:Returns the engage power management event information queued in the Power Management Services subsystem for system BIOS (semaphore implementation).
 * QPOWENG1.SCR:Returns the engage power management event information queued in the Power Management Services subsystem for display devices (semaphore implementation).
 * QPOWENG2.SCR:Returns the engage power management event information queued in the Power Management Services subsystem for secondary storage devices (semaphore implementation).
 * QPOWENG3.SCR:Returns the engage power management event information queued in the Power Management Services subsystem for parallel ports (semaphore implementation).
 * QPOWENG4.SCR:Returns the engage power management event information queued in the Power Management Services subsystem for serial ports (semaphore implementation).
 * QPOWENG6.SCR:Returns the engage power management event information queued in the Power Management Services subsystem for PCMCIA sockets (semaphore implementation).
 * QPWDSE01.SCR:Returns the disengage power management event information queued in the Power Management Services subsystem for system BIOS-managed devices (semaphore implementation).
 * QPWDSEN0.SCR:Returns the disengage power management event information queued in the Power Management Services subsystem for system BIOS (semaphore implementation).
 * QPWDSEN1.SCR:Returns the disengage power management event information queued in the Power Management Services subsystem for display devices (semaphore implementation).
 * QPWDSEN2.SCR:Returns the disengage power management event information queued in the Power Management Services subsystem for secondary storage devices (semaphore implementation).
 * QPWDSEN3.SCR:Returns the disengage power management event information queued in the Power Management Services subsystem for parallel ports (semaphore implementation).
 * QPWDSEN4.SCR:Returns the disengage power management event information queued in the Power Management Services subsystem for serial ports (semaphore implementation).
 * QPWDSEN6.SCR:Returns the disengage power management event information queued in the Power Management Services subsystem for PCMCIA sockets (semaphore implementation).
 * QPWENS01.SCR:Returns the enable power management event information queued in the Power Management Services subsystem for system BIOS-managed devices (non-semaphore implementation).
 * QPWENNS0.SCR:Returns the enable power management event information queued in the Power Management Services subsystem for system BIOS (non-semaphore implementation).
 * QPWENNS1.SCR:Returns the enable power management event information queued in the Power Management Services subsystem for display devices (non-semaphore implementation).
 * QPWENNS2.SCR:Returns the enable power management event information queued in the Power Management Services subsystem for secondary storage devices (non-semaphore implementation).
 * QPWENNS3.SCR:Returns the enable power management event information queued in the Power Management Services subsystem for parallel ports (non-semaphore implementation).
 * QPWENNS4.SCR:Returns the enable power management event information queued in the Power Management Services subsystem for serial ports (non-semaphore implementation).
 * QPWENNS6.SCR:Returns the enable power management event information queued in the Power Management Services subsystem for PCMCIA sockets (non-semaphore implementation).
 * QPDSNS01.SCR:Returns the disable power management event information queued in the Power Management Services subsystem for system BIOS-managed devices (non-semaphore implementation).
 * QPWDSNS0.SCR:Returns the disable power management event information queued in the Power Management Services subsystem for system BIOS (non-semaphore implementation).
 * QPWDSNS1.SCR:Returns the disable power management event information queued in the Power Management Services subsystem for display devices (non-semaphore implementation).
 * QPWDSNS2.SCR:Returns the disable power management event information queued in the Power Management Services subsystem for secondary storage devices (non-semaphore implementation).
 * QPWDSNS3.SCR:Returns the disable power management event information queued in the Power Management Services subsystem for parallel ports (non-semaphore implementation).
 * QPWDSNS4.SCR:Returns the disable power management event information queued in the Power Management Services subsystem for serial ports (non-semaphore implementation).
 * QPWDSNS6.SCR:Returns the disable power management event information queued in the Power Management Services subsystem for PCMCIA sockets (non-semaphore implementation).
 * QPEGNS01.SCR:Returns the engage power management event information queued in the Power Management Services subsystem for system BIOS-managed devices (non-semaphore implementation).
 * QPENGNS0.SCR:Returns the engage power management event information queued in the Power Management Services subsystem for system BIOS (non-semaphore implememtation).
 * QPENGNS1.SCR:Returns the engage power management event information queued in the Power Management Services subsystem for display devices (non-semaphore implementation).
 * QPENGNS2.SCR:Returns the engage power management event information queued in the Power Management Services subsystem for secondary storage devices (non-semaphore implementation)
 * QPENGNS3.SCR:Returns the engage power management event information queued in the Power Management Services subsystem for parallel ports (non-semaphore implementation).
 * QPENGNS4.SCR:Returns the engage power management event information queued in the Power Management Services subsystem for serial ports (non-semaphore implementation)
 * QPENGNS6.SCR:Returns the engage power management event information queued in the Power Management Services subsystem for PCMCIA sockets (non-semaphore implementation).
 * QPDGNS01.SCR:Returns the disengage power management event information queued in the Power Management Services subsystem for system BIOS-managed devices (non-semaphore implementation).
 * QPDSGNS0.SCR:Returns the disengage power management event information queued in the Power Management Services subsystem for system BIOS (non-semaphore implementation).
 * QPDSGNS1.SCR:Returns the disengage power management event information queued in the Power Management Services subsystem for system BIOS-managed devices (non-semaphore implementation).
 * QPDSGNS2.SCR:Returns the disengage power management event information queued in the Power Management Services subsystem for secondary storage devices (non-semaphore implementation).
 * QPDSGNS3.SCR:Returns the disengage power management event information queued in the Power Management Services subsystem for parallel ports (non-semaphore implementation).
 * QPDSGNS4.SCR:Returns the disengage power management event information queued in the Power Management Services subsystem for serial ports (non-semaphore implementation).
 * QPDSGNS6.SCR:Returns the disengage power management event information queued in the Power Management Services subsystem for PCMCIA sockets (non-semaphore implementation).
 * QP01SE.SCR:Queries the power state of system BIOS-managed devices using semaphores for event notification.
 * QP0SE.SCR:Queries the power state of system BIOS using semaphores for event notification.
 * QP1SE.SCR:Queries the power state of display devices using semaphores for event notification.
 * QP2SE.SCR:Queries the power state of secondary storage devices using semaphores for event notification.
 * QP3SE.SCR:Queries the power state of parallel ports using semaphores for event notification.
 * QP4SE.SCR:Queries the power state of serial ports using semaphores for event notification.
 * QP6SE.SCR:Queries the power state of PCMCIA sockets using semaphores for event notification.
 * QP01NS.SCR:Queries the power state of system BIOS-managed devices without using semaphores.
 * QP0NS.SCR:Queries the power state of system BIOS without using semaphores.
 * QP1NS.SCR:Queries the power state of display devices devices without using semaphores.
 * QP2NS.SCR:Queries the power state of secondary storage devices without using semaphores.
 * QP3NS.SCR:Queries the power state of parallel ports without using semaphores.
 * QP4NS.SCR:Queries the power state of serial ports without using semaphores.
 * QP6NS.SCR:Queries the power state of PCMCIA sockets without using semaphores.
 * QPOWINFO.SCR:Returns the Power Management subsystem and BIOS configuration information.
 * QPOWSTAT.SCR:Returns the current power state information for the system and system devices.
 * QPWSTE01.SCR:Returns the current power state of system BIOS-managed devices.
 * QPOWSTE0.SCR:Returns the current power state of system BIOS.
 * QPOWSTE1.SCR:Returns the current power state of display devices.
 * QPOWSTE2.SCR:Returns the current power state of secondary storage devices.
 * QPOWSTE3.SCR:Returns the current power state of parallel ports.
 * QPOWSTE4.SCR:Returns the current power state of serial ports.
 * QPOWSTE6.SCR:Returns the current power state of PCMCIA sockets.
 * RBIOSDNS.SCR:Returns the Restore BIOS defaults event information queued in the Power Management Services Subsystem (non-semaphore implementation).
 * RBIOSDSE.SCR:Returns the Restore BIOS defaults event information queued in the Power Management Services Subsystem (semaphore implementation).
 * SINIDOFF.SCR:Handles the error case in which the power of an invalid device is attempted to be set to off.
 * SINSTAT1.SCR:Attempts to set the power of a valid device to an invalid power state.
 * SINVSTAT.SCR:Attempts to set the power of an invalid device to an invalid power state.

Evaluation of Test Case Results
The script files test all of the different APM IOCtl functions for the Advanced Power Management device driver. After each script file has finished executing, it will log all of the test information to a log file. Unless otherwise stated in the test case-description, all test cases are expected to succeed. If a test case fails in a mode detectable by the DDTT, then the token "ERROR" will be written to the corresponding file. On the other hand, if the test case is designed in such a manner that "ERROR" is expected, a "SUCCESS" is logged to the log file indicating that the test case is successful.

When the all of the script file has finished executing, the command file will search all of the log files for any errors that have occurred. The results from this search are stored in the RESULTS.TXT. The command file is searching only for the word "ERROR". If the script is testing an error situation, the user should also check a following "SUCCESS" to determine the real outcome of the test.