# CUPS Software Test Plan

This software test plan provides detailed tests that are used to evaluate the stability and compliance of CUPS.

## Test Procedure

The test software and data files are located in the test subdirectory of the source distribution. A script is provided to compile the `ipptool` program and run all of the tests that follow, producing a success/fail report.

The `test` target of the top-level makefile can be used to run this script:

    make test

or you can run the test script directly:

    cd test
    ./run-stp-tests

A Software Test Report is stored in a HTML file in the test subdirectory at the conclusion of the test.

## IPP Compliance Tests

This section describes the tests used to validate the IPP standards compliance of the CUPS server.

### Request Tests

These tests verify that the CUPS scheduler only accepts valid IPP requests that start with the `attributes-charset` and `attributes-natural-language` attributes and also contain a `printer-uri` or `job-uri` attribute.

It also verifies that the CUPS scheduler always responds with `attributes-charset` and `attributes-natural-language` attributes, using default values if they are not provided by the client.

### CUPS Printer Operation Tests

These tests verify that the CUPS printer operations are supported and function properly. Two printers called `Test1` and `Test2` are created, one as a PostScript printer and one as a raster printer.

### Job Operation Tests

These test verify that the CUPS scheduler accepts print jobs for all supported file formats and that the `cancel-job`, `hold-job`, and `resume-job` operations work.

### Subscription Operation Tests

These test verify that the CUPS scheduler accepts subscriptions with print jobs and that all subscription operations work as required by the IPP notification and mailto specifications.

## Command Tests

This section describes the tests used to validate the Berkeley and System V commands included with CUPS.

### lpadmin

This test verifies that printers can be added, modified, and defaulted using the `lpadmin` command.

### lpc

This test verifies that the `lpc` command can show the current status of all print queues.

### lpq

This test verifies that the `lpq` command lists any jobs in the queue.

### lpstat

This test verifies that the `lpstat` command works with all reports using the "`-t`" option.

### lp

This test verifies that the `lp` command works with both the default destination and a specific destination.

### lpr

This test verifies that the `lpr` command works with both the default destination and a specific destination.

### lprm

This test verifies that the `lprm` command can properly cancel a job.

### cancel

This test verifies that the `cancel` command can properly cancel a job or all jobs.

### lpinfo

This test verifies that the `lpinfo` command returns a list of available printer drivers and devices.