X.500 test suite

Richard Colella <colella@emu.ncsl.nist.gov> Fri, 04 September 1992 20:45 UTC

Received: from ietf.nri.reston.va.us by IETF.NRI.Reston.VA.US id aa08130; 4 Sep 92 16:45 EDT
Received: from NRI.NRI.Reston.Va.US by IETF.NRI.Reston.VA.US id aa08126; 4 Sep 92 16:45 EDT
Received: from haig.cs.ucl.ac.uk by NRI.Reston.VA.US id aa17893; 4 Sep 92 16:48 EDT
Received: from bells.cs.ucl.ac.uk by haig.cs.ucl.ac.uk with local SMTP id <g.04889-0@haig.cs.ucl.ac.uk>; Fri, 4 Sep 1992 16:28:41 +0100
Received: from EMU.NCSL.NIST.GOV by bells.cs.ucl.ac.uk with Internet SMTP id <g.20700-0@bells.cs.ucl.ac.uk>; Fri, 4 Sep 1992 16:25:46 +0100
Received: by emu.ncsl.nist.gov (4.1/NIST(rbj/dougm)) id AA15306; Fri, 4 Sep 92 11:27:50 EDT
Date: Fri, 4 Sep 92 11:27:50 EDT
From: Richard Colella <colella@emu.ncsl.nist.gov>
Organization: National Institute of Standards and Technology (NIST)
Sub-Organization: Computer Systems Laboratory (CSL)
Message-Id: <9209041527.AA15306@emu.ncsl.nist.gov>
To: osi-ds@cs.ucl.ac.uk
Subject: X.500 test suite

Attached is a draft of X.500 interoperability tests being worked on by
OSInet, FYI.  If you would like to provide comments, send them to Eva Kuiper
at eva@hpindda.cup.hp.com.  There is an OSInet meeting on Sept 22nd where
comments will be discussed.

--Richard


----------------------------------------------------------------------------









                             CCITT X.500/ISO 9594
                               Directory Service
                            Interoperability Tests


                                  Version 1.0


                                     DRAFT

                                92-06-01

1.  Background Information

1.1 Introduction

This document defines the X.500 Directory Service (1509495) Interoperability 
Test suite for testing in an OSI environment. The original effort to develop 
these tests was started by Kaif Informatics Ltd. in Ontario, canada. The 
original tests went through several iterations including additions supporting 
Quipu 5.0 & 6.0. This version was derived from the original work through the 
combined efforts of the OSInet Technical Committee and OIW Directory Service 
SIG. Among the changes from the original test is the removal of dependences for 
Quipu and the incorporation of Directory Tree, objects, attributes, and 
attribute syntaxes which will be used for the DAP and DSP tests.

1.1.1 Revision History

Versions 1.0 - 1.2 denote versions that were developed by Kaif Informatics Ltd. 
in Ontario, Canada. Kaif provided OSInet with Version 1.2. The first 
version edited by OSINET is Version 1.3.

Version 1.0

This is the first version of this document. Future revisions will include 
interoperability tests for the Directory System Service. The tests included in 
the first version are for testing the Directory Access Service only.

Version 1.1

This version adds several general updates and corrections to the tests
currently defined. It also includes verified test suites for Quipu 5.0.
The Quipu Notes section of each test provides a guide to executing the
tests using an implementation of the Dish user interface.

Version 1.2

This version provides an update to include testing notes for Quipu 6.0.

Version 1.3

This version is the first draft of the OSINET X.500 test suites. The major 
changes are deletions of all references to QUIPU to make the test cases 
universal. The test cases have also been edited for conformance to the base 
standards and to the various functional standards from NIST and EWOS.

Version 1.4

This version incorporates the Directory Tree, Objects, Attributes. and Attribute
Syntaxes which wi1l be used for the DAP and DSP tests.

Version 1.0

The version number was reset to 1.0.  Includes OIW input from March 1992 workshop.

1.2 Overview

The CCITT X.500 Series of Recommendations (ISO 9495 Directory Service Standards)
defines the system models, service elements and protocol aspects of the 
Directory Access Service, the Directory System Service and the Authentication 
Framework required for a complete Directory Service. This document defines 
tests which are sufficient to demonstrate interoperability between participants 
implementing the Directory User Agents and Directory Service Agents of the 
DS.

1.2.1  Test Objectives

These tests verify the ability of a DUA to establish an association with a DSA 
and to generate meaningful requests for directory information. These tests 
also verify that the requests have been properly processed by the DSA and the 
results are the correct responses for the requests. The tests also verify 
interoperability between DSAs which chain requests on behalf of a DUA client.

1.2.2 Category of Tests

[outline of text, needs work]
DAP, DSP
Same tree used so result should be same for DAP, DSP except where stated 
otherwise for a specific test.
The tests are grouped as follows:
    Association, Establishment, and Release.
    Directory Interrogation Operations
         Read, Compare, list, Search
    Directory Modify Operations
         Add, Remove, Modify, Modify RDN

1.2.3 The Directory Information Tree

A test structure for the Directory Information Tree must be agreed upon by the 
testing participants. All operations require a Distinguished Name to 
identify the portion of the tree or a specific entry which will be operated on. 
Results obtained from an operation are dependent on the DIT and the entries 
created for testing purposes. The Distinguished Names for directory objects 
should be formed in accordance with the suggestions provided in X.521 Annex B - 
Suggested Name Forms and DIT Structures.

[Insert DIT graphic]

1.2.4 Groupings of Tests

    1.2.4.1 DAP
         1.2.4.1.1 Test #1, Vendor A DUA to Vendor B DSA

                         Vendor A         Vendor B

                         |-----|          |------|
                         | DUA | -------> | DSA0 |
                         |-----|          |------|

         1.2.4.1.2 Test #2, Vendor B DUA to Vendor A DSA

                         Vendor B         Vendor A

                         |-----|          |------|
                         | DUA | -------> | DSA0 |
                         |-----|          |------|

    1.2.4.2 DSP

         1.2.4.2.1 Test #3, Vendor A DUA to Vendor A DSA

                         Vendor A     Vendor A    Vendor B

                         |-----|      |------|
                         | DUA | ---> | DSA1 |
                         |-----|      |------|
                                             \
                                              \
                                               \/
                                                  |------|
                                                  | DSA2 |
                                                  |------|

         1.2.4.2.2 Test #4, Vendor A DUA to Vendor B DSA

               Vendor A  Vendor B     Vendor A

                         |-----|      |------|
                         | DSA1| <--- | DUA  |
                         |-----|      |------|
                        /
                       /
                     \/
                |------|
                | DSA2 |
                |------|

         1.2.4.2.3 Test #5, Vendor B DUA to Vendor B DSA


               Vendor A  Vendor B     Vendor B

                         |-----|      |------|
                         | DSA1| <--- | DUA  |
                         |-----|      |------|
                        /
                       /
                     \/
                |------|
                | DSA2 |
                |------|

         1.2.4.2.4 Test #6, Vendor B DUA to Vendor A DSA

                         Vendor B     Vendor A    Vendor B

                         |-----|      |------|
                         | DUA | ---> | DSA1 |
                         |-----|      |------|
                                             \
                                              \
                                               \/
                                                  |------|
                                                  | DSA2 |
                                                  |------|

         1.2.4.2.5 Test #7, Superior Reference Vendor B DUA to Vendor A DSA

                          Vendor A    Vendor B    Vendor A

                          |------|
                          | DSA1 |
                          |------|
                                 /\
                                   \
                                    \
                                      |-----|      |------|
                                      | DUA | ---> | DSA2 |
                                      |-----|      |------|
         1.2.4.2.6 Test #8, Superior Reference Vendor A DUA to Vendor B DSA

                         Vendor B     Vendor A    Vendor B

                                                  |------|
                                                  | DSA1 |
                                                  |------|
                                               /\
                                              /
                                             /
                         |-----|      |------|
                         | DUA | ---> | DSA2 |
                         |-----|      |------|

1.2.5 Judging Success or Failure of a Test

Success is assumed if the DSA responds with the expected results for a DUA 
request. In some cases, such as the Modify port operations. The DUA should 
perform an additional Read operation to determine whether the modifications
have actually been performed. Although the Modify operations return a result. 
It is null and success of the operation cannot be directly verified from such a 
response. NOTE: The return of a NULL response only verifies that the 
operation was performed. The use of a confirmed service to provide this notice 
is questionable. An unconfirmed service would be sufficient and reduce 
traffic on the network.

1.2.6 Directory Objects and their values

In order to facilitate testing the directory will be populated with known 
objects indicated below:
c=us/o=y
{objectClass, organization}
{organizationName, "y"}
{description, "country x org y"}
{searchGuide, .....}
{userPassword, "xyz"}

c=us/o=y/ou=marketing
{objectClass, organizationalUnit}
{organizationalUnitName, "marketing"}
{description, "Tall Tales Dept"}
{seeAlso, c=us/o=y/ou=sale_hq}
{posta1Address, {"Haunted Mansion", "OSIworld USA" }}

c=us/o=y/ou=sales_hq
{objectClass, organizationalUnit}
{organizationalUnitName, "sales_hq"}
{description, "Big Wheels Headquarters"}
{businessCategory, "Interop Testing"}

c=us/o=y/ou=marketing/cn=fred
{objectClass, organizationalPerson}
{commonName, "fred"}
{description, "Habitual Liar"}
{title, "Manager"}
{telephoneNumber, "+12345678901"}
{surname, "Handel"}
[UserPassword, "fred"}

c=us/o=y/ou=marketing/ou=mrkt_hq
{objectClass, organizationalUnit}
{organizationalUnitName, "mrkt_hq"}
{description, "Headquarters"}
{localityName, "NoWhere"}
{facsimileTelephoneNumber, SEQ {"+123456"}}

c=us/o=y/ou=sales_hq/cn=jerry
{objectClass, organizationalPerson}
{commonName, "jerry"}
{description, "salesman"}
{surname, "Ford"}

c=us/o=y/ou=marketing/cn=director
{objectClass, aliasedOrganizationalRole}
{commonName, "director"}
{description, {"Big Chief", "Big Cheese"}
{aliasedObjectName,c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin}

c=us/o=y/ou=marketing/cn=manager
{objectClass, aliasedOrganizationalRole}
{commonName, "manager"}
{description, "Kevin's sidekick"}
{aliasedObjectName, c=us/o=y/ou=marketing/cn=fred

c=us/o=y/ou=marketing/ou=mrkt_east
{objectClass, OrganizationalUnit}
{organizationalUnitName, "mrkt_east"}
{description, "Eastern Branch}

c=us/o=y/ou=marketing/ou=mrkt_west
{objectClass, OrganizationalUnit}
{organizationalUnitName, "mrkt_west"}
{description, "Western Branch}

c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve
{objectClass, OrganizationalPerson}
{commonName, "steve"}
{surname, "Thomas"}
{description, "tcpip wizard"}

c=us/o=y/ou=marketing/ou=mrkt_east/cn=salesman
{objectClass, aliasedOrganizationalRole}
{commonName, "salesman"}
{aliasedObjectName, c=us/o=y/ou=sales_hq/cn=jerry

c=us/o=y/ou=marketing/ou=mrkt_west/ou=mrkt_ca
{objectClass, OrganizationalUnit}
{organizationalUnitName, "mrkt_ca"}
{description, "Surfboard University"}

c=us/o=y/ou=sales_hq/ou=sales
{objectClass, organizationalPerson}
{commonName, "paul"}
{description, "silversmith"}
{surname, "Revere"}

c=us/o=y/ou=east
{objectClass, aliasedOrganizationalUnit}
{aliasedObjectName, c=us/o=y/ou=marketing/ou=mrkt_east}

c=us/ou=marketing/ou=mrkt_west/cn=kevin
{objectClass, organizationalPerson}
{commonName, "kevin"}
{surname, "Ford"}
{description, "Director of Marketing"}

2.  X.5OO Interoperability Test Descriptions

In the following sections, each test is listed, specifying the test code, the 
purpose of the test, the testing procedure and the expected results of the 
test. Each test is designated as Mandatory or Optional according to whether the 
operation or feature is required to be supported by a valid DS 
implementation for the owner of the DS profile.

2.1 Bind/Unbind Tests

2.1.1 Test BU-001

Purpose: Test Association establishment between DUA and DSA with no authentication.

Procedure:
1. Invoke Bind operation with no userid or password.
2. DSA generates Bind Result indicating that association has been successful.
NOTES: The responding DSA must support No Authentication.

Expected Results: Bind Result using the versions parameter set (v1988).

NOTES: X.511 Version default is v1988 and test does not expect the DUA to allow 
version setting.

2.1.2 Test BU-002

Purpose: Test Association establishment with simple authentication.

Procedure:
1. Invoke Bind operation with the PSAP of a valid DSA.
2. Assume versions parameter (vl988).
3. Provide simple credentials with a valid user DN, 
c=us/o=y/ou=marketing/cn=fred, and password = "fred".
4. DSA generates a Bind Result.

Expected Results: Bind Result with DSA version, name, and password of DSA.

2.1.3  Test BU-003

Purpose: Test Association with simple authentication error.

Procedure:
1. Invoke Bind operation with the DN, c=us/o=y/ou=marketing/cn=fred, of a valid 
DSA.
2. Assume versions parameter (v1988).
3. Provide a valid user DN and an invalid password.
4. DSA generates a BindError

Expected Results: DirectoryBindError: securityError (invalidCredentials) is 
returned. No connection to the DSA should be made.

2.1.4 Test BU-004

Purpose: Test association release.

Procedure:
1. Invoke Unbind operation

Expected Results: No explicit results from DSA. Association should be released.

2.2 Read Port Tests

2.2.1 Test READ-OO1

Purpose: Test default arguments of Read operation.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #7:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"
Test #8:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"

Procedure:
1. Invoke Read operation with a valid DN of object entry.
2. Set selection argument to empty (i.e. {}).
3. Set ServiceControls and SecurityParameters to default.
4. DSA generates a valid Read Result.

NOTES:  The target object must be unique with no copies cached by the DSA. It 
should also not be an alias object. The default is defined in X.511.

Expected Results: Entryinformation includes the DN of the target object.

2.2.2 Test READ-002

Purpose: Test Directory Read to read all attributes of an entry.

Procedure:
1. Invoke Read operation with the following valid DNs:
Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #7:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"
Test #8:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"
2. Set attributeTypes argument to allAttributes indicating all attributes of an 
entry are to be read.
3. Set infoTypes argument to attributeTypesAndValues
4. Set ServiceControls to localScope, dontUseCopy, and dontDereferenceAliases. 
All other ServiceControls parameters will be defaulted.
5. DSA generates a Read Result.

Expected Results: Read Result EntryInformation includes the DN of the entry, 
fromEntry=TRUE and AttributeType with all associated AttributeValues for each 
attribute defined in the entry. CommonResults should have aliasDereferenced = 
FALSE and may contain the DN of the performer DSA. This last value may be 
missing without invalidating the results.

2.2.3  Test READ-003

Purpose: Test Directory Read of selected attributes in an entry.

Procedure:
1. Invoke Read operation with the following valid DNs:
Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #7:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"
Test #8:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"

Procedure:
1. Invoke Read operation with a valid DN of an object entry.
2. Set attributeTypes = {"description, surname"}.
3. Set InfoTypes = attributeTypesAndValues.
4. Set ServiceControls as in READ-001.
5. DSA should generate a Read Result.

Expected Results: Entryinformation includes the DN of the target entry, 
fromEntry=TRUE, and the attributes types and values for each selected attribute 
will be included. The aliasDereferenced parameter should be FALSE.

2.2.4 Test READ-004
Purpose: Test Alias dereferencing in the Read operation.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #7:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=salesman"
Test #8:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=salesman"

Procedure:
1. Invoke Read operation with a valid DN of an alias entry.
2. Set selection argument to empty.
3. Set ServiceControls dontDereferenceAliases to FALSE.
4. DSA should generate a Read Result

Expected Results: The object entry aliased by the Alias entry will be returned 
with the values of all attributes of the entry. The aliasDereferenced 
parameter will be set to TRUE. The same Service-Controls defaults as used
in the previous test should be set.

2.2.5 Test READ-005

Purpose: Test Read with an nonexistent attribute type.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #7:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"
Test #8:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"

Procedure:
1. Provide a valid DN of an existing object entry.
2. The selection argument will specify a select parameter with a nonexistent 
AttributeType of telephoneNumber.
3. The DSA will return an Error.

Expected Results: AttributeError with noSuchAttributeOrValue problem.

2.2.6 Test READ-006

Purpose: Test Read operation with an nonexistent DN.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=jim"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=jim"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=jim"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=jim"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_hq/cn=jim"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_hq/cn=jim"
Test #7:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jim"
Test #8:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jim"

Procedure:
1. Provide a purported DN for a nonexistent object
2. The DSA will return an Error.

Expected Results: NameError with noSuchObject as the problem.

2.2.7  Test COMPARE-001

Purpose: Test Compare operation with single attribute type and value.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #7:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"
Test #8:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"

Procedure:
1. Provide valid DN of an existing object entry.
2. The purported argument will contain the existing attribute type surname, and 
its value.
3. CommonArguments should be set to the default values.
4. The DSA will return a Compare Results.

Expected Results: The CompareResult will have matched = TRUE, fromEntry = TRUE 
and CommonResults will contain default values.

2.2.8  Test COMPARE-002

Purpose: Compare value of an Alias object name.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #7:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=salesman"
Test #8:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=salesman"

Procedure:

1. Provide a valid DN of an Alias entry.
2. Attribute type is aliased object name.
3. Set ServiceControls parameter to disallow alias dereferencing 
(dontDereferenceAliases = TRUE).
4. Other CommonArguments will be set to default values.
5. The DSA will return a Compare Results.

Expected Results: The matched parameter should be TRUE, fromEntry will be TRUE, 
and the aliasDereferenced parameter of CommonResults will be FALSE.

2.2.9 Test COMPARE-003

Purpose: Test comparisons on an Alias entry using attribute types defined for 
the dereferenced aliased object entry.

Part A.
Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #7:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=salesman"
Test #8:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=salesman"

Procedure:
1. Provide a valid DN of an Aliasentry.
2. Provide the attribute type, "surname", and value which exists in the 
dereferenced object entry.
3. Set ServiceControls parameter to allow alias dereferencing 
(dontdereferencealias = FALSE).
4. Other CommonArguments will be set to default values. The purported 
AttributeType should specify a valid attribute for the Aliased Object rather 
than the Alias entry itself.
5. The DSA will return a Compare Results.

Part B.
Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #7:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=salesman"
Test #8:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=salesman"

Procedure:
1. Provide a valid DN of an Aliasentry.
2. Provide the attribute type, "surname", and value which exists in the 
dereferenced object entry.
3. Set ServiceControls parameter to allow alias dereferencing 
(dontdereferencealias = TRUE).
4. Other CommonArguments will be set to default values. The purported 
AttributeType should specify a valid attribute for the Aliased Object rather 
than the Alias entry itself.
5. The DSA will return a Compare Results and result should be FALSE.

Part C.
Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/cn=director"
Test #7:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=salesman"
Test #8:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=salesman"

Procedure:
1. Provide a valid DN of an Aliasentry.
2. Provide the attribute type, "surname", and value which exists in the 
dereferenced object entry.
3. Set ServiceControls parameter to allow alias dereferencing 
(dontdereferencealias = FALSE).
4. Other CommonArguments will be set to default values. The purported 
AttributeType should specify a valid attribute for the Aliased Object rather 
than the Alias entry itself.
5. The DSA will return a Compare Results and the result should be FALSE.

Expected Results: The matched parameter should be TRUE, fromEntry should be 
TRUE, and the aliasDereferenced parameter of Common Results should be TRUE.

2.2.10  Test COMPARE-004
(LIMITATION)

Purpose: Test referrals in the Compare operation.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #7:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"
Test #8:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"

Procedure:
1. Provide a DN of an object which is stored in another DSA from the one 
currently being interrogated.
2. Use a single AVA for the purported parameter.
3. Set ServiceControls parameter so that chainingProhibited is TRUE.
4. Default all other arguments.
5. The DSA will return an Error.

Expected Results: This is technically not an error but referrals are returned
as an Error response. The Referral will supply the following values in the 
candidate parameter: targetObject will be the name of the object entry 
designated in the request, the accessPoints parameter will contain the name of 
the DSA holding the target object and the Presentation Address of the DSA.

2.2.11  Test COMPARE-OO5

Purpose: Test a failed abandon of a Compare operation.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #7:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"
Test #8:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"

Procedure:

1. Repeat COMPARE-001.
2. Wait a few moments before abandoning the request.
3. Invoke an Abandon operation with the invoke-ID of the Compare operation.
4. The DSA will return an Abandon Result for the last operation.

NOTES: The wait should be long enough for the recipient DSA to complete the 
original operation successfully

Expected Results: The DSA will return a Compare Result which will be identical 
to the result of COMPARE-001. In addition an AbandonFailed result will be 
returned in response to the attempt to abandon the completed operation with the 
tooLate problem identified. No such operation is also
a valid result since test is time dependent.

2.3 Search Port Tests

2.3.1 Test LIST-001

Purpose: Test List operation on a leaf entry.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #7:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"
Test #8:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"

Procedure: 

l. Provide a DN for a valid leaf entry. 
2. Set ServiceControls to dontDereferenceAlias = TRUE and dontUseCopy = TRUE.
3. Default all other CommonArguments.
4. The DSA will return a List Result.

Expected Results: The results provided will be empty since there are no 
sub-ordinates of a leaf entry.

2.3.2 Test LIST-002

Purpose: Test List operation on a non-leaf entry.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #7:
    1.  DN="c=us/o=y/ou=marketing"
Test #8:
    1.  DN="c=us/o=y/ou=marketing"

Procedure:

l. Provide a valid DN for a non-leaf object entry.
2. Set ServiceControls to disallow alias dereferencing and using copies as in 
LIST-001.
3. Default all other parameters.
4. The DSA will return a List Result.

Expected Results: The List Result will contain the RDNs of the immediately 
subordinate entries of the target entry. The aliasEntry parameter may be TRUE 
for any Alias objects found and the fromEntry for each subordinate entry listed 
will be TRUE.

2.3.3 Test LIST-003

Purpose: Test List operation on an Alias entry.

Part A.
Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=east"
Test #2:
    1.  DN="c=us/o=y/ou=east"
Test #3:
    1.  DN="c=us/o=y/ou=east"
Test #4:
    1.  DN="c=us/o=y/ou=east"
Test #5:
    1.  DN="c=us/o=y/ou=east"
Test #6:
    1.  DN="c=us/o=y/ou=east"
Test #7:
    1.  DN="c=us/o=y/ou=east"
Test #8:
    1.  DN="c=us/o=y/ou=east"

Procedure:

1. Use the same procedure as in LIST-001.
2. Set the ServiceControls to allow alias dereferencing 
(dontDereferenceAlias=FALSE)
3. The DSA will return a List Result with values of steve and salesman.

Expected Results: The CommonResults argument will have the aliasDereferenced 
parameter set to TRUE.

Part B.
Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=east"
Test #2:
    1.  DN="c=us/o=y/ou=east"
Test #3:
    1.  DN="c=us/o=y/ou=east"
Test #4:
    1.  DN="c=us/o=y/ou=east"
Test #5:
    1.  DN="c=us/o=y/ou=east"
Test #6:
    1.  DN="c=us/o=y/ou=east"
Test #7:
    1.  DN="c=us/o=y/ou=east"
Test #8:
    1.  DN="c=us/o=y/ou=east"

Procedure:

1. Use the same procedure as in LIST-001.
2. Set the ServiceControls to allow alias dereferencing 
(dontDereferenceAlias=TRUE)
3. The DSA will return a List Result with nothing in it.

Expected Results: Nothing.

2.3.4 Test LIST-004

Purpose: Test List operation on an object with a subordinate Alias object.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #7:
    1.  DN="c=us/o=y/ou=marketing"
Test #8:
    1.  DN="c=us/o=y/ou=marketing"

Procedure:

1. Provide a valid DN for an object which has one or more subordinate Alias 
entries.
2. Set ServiceControls to allow alias dereferencing (dontDereference=FALSE).
3. The DSA will return the List Result.

Expected Results: The RDNs returned in the List Result will include all 
subordinate objects and alias entries of the target object. The 
aliasDereferenced parameter in CommonResults will be FALSE since the target 
object was not an Alias. Those subordinate entries which are aliases will
not be dereferenced per X.511 but will be marked as aliases.

2.3.5  Test LIST-005
(LIMITATION)

Purpose: Test List operation with partial outcomes.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #7:
    1.  DN="c=us/o=y/ou=marketing"
Test #8:
    1.  DN="c=us/o=y/ou=marketing"

Procedure:
l. Use the same general procedures outlined in LIST-004.
2. Set the ServiceControls sizeLimit parameter to a small number (i.e. 1).
3. The DSA will return a List Result.

NOTES: This test will succeed if the size limit is less than the number of RDNs 
returned for the LIST-004 test.

Expected Results: The List Result will include one RDN of an immediate 
subordinate and the partialOutcomeQualifier will be set. The limitProblem
should be reported with sizeLimitExceeded problem.

2.3.6 Test LIST-006

Purpose: Test List operation with errors.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=jim"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=jim"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=jim"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=jim"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=jim"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=jim"
Test #7:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_hq/cn=jim"
Test #8:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_hq/cn=jim"

Procedure:

l. Provide a DN for a non-existent target object.
2. Default all ServiceControls and SecurityParameters.
3. The DSA will return an Error.

Expected Results: The NameError will be returned with the problem NoSuchObject.

2.3.7  Test SEARCH-001
Purpose: Test simple Search operation.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #7:
    1.  DN="c=us/o=y/ou=marketing"
Test #8:
    1.  DN="c=us/o=y/ou=marketing"

Procedure:
1. Provide a DN for an existing object entry.
2. Set the subset parameter to baseObjectOnly.
3. Set the filter to empty and searchAliases to FALSE.
4. The selection parameter should be set to allAttributes and 
attributeTypesAndValues.
5. Set ServiceControls to dontDereferenceAliases.
6. The DSA will return a Search Result.

Expected Results: The searchinfo parameter will contain the entire entry for
the target object. The partialOutcomeQualifier will be empty and the 
aliasDereferenced parameter of CommonResults will be FALSE.

2.3.8 Test SEARCH-002

Purpose: Test Search operation using a one level descent.

Part A.
Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #7:
    1.  DN="c=us/o=y/ou=marketing"
Test #8:
    1.  DN="c=us/o=y/ou=marketing"

Procedure:
1. Provide a DN for an existing target object.
2. Set subset parameter to oneLevel.
3. Set filter to empty and searchAliases to FALSE.
4. Set Service Controls to dontDereferenceAliases.
5. The selection parameters should be set to allAttributes and 
attributeTypeAndValues.
6. The DSA will return a Search Result:

Expected Results: The searchinfo result will not include a value for the 
Distinguishedname field. It will provide all immediate subordinate object 
entries. The base object will not be displayed but the immediately subordinate 
entries will be displayed (Tests #1-6, steve, salesman), (Tests #7-8, fred, 
mrkt_hq, mrkt_east, mrkt_west, manager, director).

Part B.
Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east"
Test #7:
    1.  DN="c=us/o=y/ou=marketing"
Test #8:
    1.  DN="c=us/o=y/ou=marketing"

Procedure:
1. Provide a DN for an existing target object.
2. Set subset parameter to oneLevel.
3. Set filter to empty and searchAliases to TRUE.
4. Set Service Controls to dontDereferenceAliases.
5. The selection parameters should be set to allAttributes and 
attributeTypeAndValues.
6. The DSA will return a Search Result:

Expected Results: The searchinfo result will not include a value for the 
Distinguishedname field. It will provide all immediate subordinate object 
entries. 

The base object will not be displayed but the immediately subordinate entries 
will be displayed after alias has been dereferenced.

The results are: (Tests #1-6, steve, jerry), (Tests #7-8, fred, mrkt_east, 
mrkt_west, mrkt_hq, kevin).

2.3.9 Test SEARCH-003

Purpose: Test Search operation on a subtree.

Part A.
Procedure:

1. Provide a DN (c=us/o=y) for an existing base object for Tests #1-8.
2. Set the subset parameter to wholeSubtree.
3. Set filter to empty and search alias to FALSE.
4. Set service controls to dontDereferenceAliases.
5. The DSA will return a Search Result.

NOTES: The DIT should contain a subtree of at least four nodes below the base 
object.

Expected Results: The entries set will include full entry information for each 
object in the subtree subordinate to the base object.


Part B.
Procedure:

1. Provide a DN (c=us/o=y) for an existing base object for Tests #1-8.
2. Set the subset parameter to wholeSubtree.
3. Set filter to empty and search alias to TRUE.
4. Set service controls to dontDereferenceAliases.
5. The DSA will return a Search Result.

NOTES: The DIT should contain a subtree of at least four nodes below the base 
object.

Expected Results: The entries set will include full entry information for each 
object in the subtree subordinate to the base object except aliases.

2.3.10   Test SEARCH-004

Purpose: Test Search operation on a subtree with a simple filter.

Part A.
Procedure:
1. Provide a valid DN (c=us/o=y/ou=marketing) for the base object for Tests 
#1-8.
2. Set the Filteritem parameters to a single valued AVA (equality matching), 
surname="Ford".
3. Set searchAlias to FALSE.
4. Set service controls to dontDereferenceAlias.
5. The DSA returns a successful Search Result.

Expected Results: All entries returned will comply with the AVA specified in
the filter argument.

The DSA returns a successful Search Result containing the result "kevin".

Part B.
Procedure:
1. Provide a valid DN (c=us/o=y/ou=marketing) for the base object for Tests 
#1-8.
2. Set the Filteritem parameters to a single valued AVA (equality matching), 
surname="Fred".
3. Set searchAlias to TRUE.
4. Set service controls to dontDereferenceAlias.
5. The DSA returns a successful Search Result.

Expected Results: All entries returned will comply with the AVA specified in
the filter argument.

The DSA returns a successful Search Result containing the result "kevin" and 
"jerry".

2.3.11   Test SEARCH-005

Purpose: Test Search operation with complex filter.

Procedure:
1. Provide a valid DN (c=us/o=y) for the base object for Tests #1-8.
2. Set the Filter to perform a logical or operation on two or more equality
AVAs and one substrings sequence to match an AttributeValue in any position of 
the attribute. Use (title= "manager" or surname = "ford" or description 
substring "Headquarters").
3. Set searchAlias to FALSE.
4. Set service controls to dontDereferenceAlias.
5. The DSA will return a successful result.

Expected Results: Results = fred, kevin, jerry, sales_hq, mrkt_hq.

2.3.12   Test SEARCH-006

Purpose: Test Search operation with entire subtree for selected attributes.

Procedure:
1. Provide a DN (c=us/o=y) for the base object for Tests #1-8.
2. Set the selection parameters to include AttributeTypes (surname,
description) and infoTypes to attributeTypesOnly.
3. Set filter to empty and searchAlias to FALSE.
4. Set service controls to dontDereferenceAliases.
5. The DSA will return a successful result.

Expected Results: The Search Results will include the DistinguishedName of each 
entry in the DIT but will include only the identifiers of the AttributeTypes 
selected in the request for those entries that contain those attributes.

2.3.13 Test SEARCH-007

Purpose: Test Search operation on subtree with full alias dereferencing.

Procedure:
1. Use a valid DN (c=us/o=y/ou=east) of an existing Alias object entry for
Tests #1-8.
2. Set ServiceControls parameter so that alias dereferencing is allowed.
3. Set filter to empty and searchAlias to TRUE.
4. The DSA will return a successful result:

Expected Results: For each aliased object the DistinguishedName parameter of 
searchinfo will be set.

2.3.14  Test SEARCH-008

Purpose: Test Search operation with alias dereferencing for one level only.

Procedure:
1. Provide the DN (c=us/o=y/ou=east) for Tests #1-8.
2. Set the subset parameter to oneLevelOnly.
3. Set the infoTypes parameter to attributeTypesAndValues.
4. Set ServiceControls parameter so that alias dereferencing is allowed.
5. Set filter to empty and searchAlias to TRUE.
6. The DSA will return a Search Result:

NOTES: If an immediate subordinate of the aliased object is an alias. Then it 
will be dereferenced and the object which it aliases will be included in the 
results. Since this aliased object is itself one level below the base object
any of its subordinates should not be included.

Expected Results: Since only one level below the base object will be searched, 
only immediate subordinates of the aliased object will be searched. The 
results will include the attribute types and values for each attributes types 
selected.

2.3.15 Test SEARCH-009

Purpose: Test Search operation with referrals.

Procedure:

1. Provide the name of a base object which has with a subordinate reference 
(c=us/o=y/ou=marketing) for Tests #3-6.
2. Set ServiceControls to Chainingprohibited.
3. Set the subset parameter to oneLevelOnly.
4. Set the infoTypes parameter to attributeTypesAndValues.
5. Set ServiceControls parameter so that alias dereferencing is allowed.
6. Set filter to empty and searchAlias to FALSE.
7. The DSA will return a Search Result:

NOTES: This test applicable to distributed operations testing only.

Expected Results: The results will include entries for each subordinate held 
within the same naming context. The partialOutcomeQualifier will return only
the unexplored parameter. This parameter will contain the continuation 
references corresponding to these subordinate refences.

2.3.16  Test SEARCH-010

Purpose: Test Search operation where the list of entries exceeds the selected 
limits.

Procedure:
1. Provide the name of a base object which has with a subordinate reference 
(c=us/o=y/ou=marketing).
2. Set the ServiceControls parameter sizeLimit to a low value (i.e. 1).
3. Set ServiceControls to chainingProhibited.
4. Set the subset parameter to oneLevelOnly.
5. Set the infoTypes parameter to attributeTypesAndValues.
6. Set ServiceControls parameter so that alias dereferencing is allowed.
7. Set filter to empty and searchAlias to FALSE.
8. The DSA will return a valid result.

Expected Results: The partialOutcomeQualifier of the Search Result will have
the limitProblem parameter set to sizeLimitExceeded.In addition for the 
distributed test the unexplored parameter should contain the name of the
target object at which the search was discontinued, the name and the 
presentation address of the DSA holding the target object.

2.3.17 Test SEARCH-011
Purpose: Test Abandon operation of a Search request.

Procedure:
1. Provide a DN (c=us/o=y) for an existing base object for Tests #1-8.
2. Set the subset parameter to wholeSubtree.
3. Set filter to empty and search alias to FALSE.
4. Set service controls to dontDereferenceAliases.
5. Abandon the request using the invoke-ID of the Search request.
6. The DSA should abandon the request and return an Abandon Result.

NOTES: The abandon may fail if it is not entered immediately after the search 
command.

Expected Results: The Abandoned Result will be NULL. No List Result will be 
returned but the Abandoned "error" will be returned with no parameters.

2.4  Modify Port Tests

All Directory Modify Operations define a NULL result to indicate the successful 
completion of the operation. This presents a small problem when trying to 
verify interoperability between two components of the Directory Service. Since 
there is no direct validation that the entry which was added, modified or 
deleted was, in fact, operated upon according to instructions, it is necessary 
to perform a Read operation after each test: The operator of these tests 
must visually verify that the requested operation was performed correctly. The 
Directory Service does not support "global" or multiple updates. Therefore, 
each test operates on a single object entry only.

2.4.1  Test ADD-001

Purpose: Test AddEntry operation with a valid leaf object entry.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=sales/cn=jim"
Test #2:
    1.  DN="c=us/o=y/ou=sales/cn=jim"
Test #3:
    1.  DN="c=us/o=y/ou=sales/cn=jim"
Test #4:
    1.  DN="c=us/o=y/ou=sales/cn=jim"
Test #5:
    1.  DN="c=us/o=y/ou=sales/cn=jim"
Test #6:
    1.  DN="c=us/o=y/ou=sales/cn=jim"
Test #7:
    1.  DN="c=us/o=y/ou=marketing/cn=jim"
Test #8:
    1.  DN="c=us/o=y/ou=marketing/cn=jim"

Procedure:
1. Provide a valid name for a leaf object entry. An immediate superior entry 
must exist and the RDN for the entry to be added must be a valid object 
class for the location in the DIT where it is to be added.
2. Provide a valid set of attributes for the entry {surname, "Ford"}, 
{description, "Administrator of Marketing"}, {objectClass, 
organizationalPerson}, {commonname, "jim"}.
3. The SecurityParameters and ServiceControls should be defaulted (i.e. empty).
4. The DSA will return a successful AddEntry Result.
5. Read the added entry using the same DN provided in the AddEntry request.

Expected Results: The AddEntry Result will be NULL indicating success. The 
results of the Read operation should verify that all attributes and values are 
correct and have been added to the DIB.

2.4.2  Test ADD-002

Purpose: Test the AddEntry operation on an existing non-leaf object.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=sales"
Test #2:
    1.  DN="c=us/o=y/ou=sales"
Test #3:
    1.  DN="c=us/o=y/ou=sales"
Test #4:
    1.  DN="c=us/o=y/ou=sales"
Test #5:
    1.  DN="c=us/o=y/ou=sales"
Test #6:
    1.  DN="c=us/o=y/ou=sales"
Test #7:
    1.  DN="c=us/o=y/ou=marketing"
Test #8:
    1.  DN="c=us/o=y/ou=marketing"

Procedure:
l. Provide a DN of an existing non-leaf object.
2. Provide a valid set of attributes for the entry. Change the value of one of 
the existing attributes so that the new entry does not exactly match the 
existing entry.
3. The SecurityParameters and ServiceControls should be defaulted (i.e. empty).
4. The DSA will return an Error.
5. Read the entry to verify that no changes were made.

Expected Results: An UpdateError will be returned with the problem 
entryAlreadyExists. The results of the Read operation should indicate that no 
changes were made to the entry.

2.4.3  Test ADD-003

Purpose: Test AddEntry of existing leaf object.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=sales/cn=paul"
Test #2:
    1.  DN="c=us/o=y/ou=sales/cn=paul"
Test #3:
    1.  DN="c=us/o=y/ou=sales/cn=paul"
Test #4:
    1.  DN="c=us/o=y/ou=sales/cn=paul"
Test #5:
    1.  DN="c=us/o=y/ou=sales/cn=paul"
Test #6:
    1.  DN="c=us/o=y/ou=sales/cn=paul"
Test #7:
    1.  DN="c=us/o=y/ou=marketing/cn=fred"
Test #8:
    1.  DN="c=us/o=y/ou=marketing/cn=fred"

Procedure:
1. Provide a DN of an existing leaf entry.
2. Provide a valid set of attributes for the entry. Change the value of one of 
the existing attributes so that the new entry does not exactly match the 
existing entry.
3. The SecurityParameters and ServiceControls should be defaulted (i.e. empty).
4. Set the entry information to valid attribute types and values for the 
existing entry. Include the RDN attributes in the entry parameter.
5. The DSA will return an Error.
6. Read the entry to verify that no changes were made.

Expected Results: An UpdateError with the problem entryAlreadyExists will be 
reported. The results from the Read operation should confirm that the existing 
entry was unchanged.

2.4.4  Test ADD-004

Purpose: Test AddEntry operation of non-existent entry as a subordinate of an 
Alias entry.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=east/cn=jim"
Test #2:
    1.  DN="c=us/o=y/ou=east/cn=jim"
Test #3:
    1.  DN="c=us/o=y/ou=east/cn=jim"
Test #4:
    1.  DN="c=us/o=y/ou=east/cn=jim"
Test #5:
    1.  DN="c=us/o=y/ou=east/cn=jim"
Test #6:
    1.  DN="c=us/o=y/ou=east/cn=jim"
Test #7:
    1.  DN="c=us/o=y/ou=east/cn=jim"
Test #8:
    1.  DN="c=us/o=y/ou=east/cn=jim"

Procedure:
1. Provide a DN for a non-existent object. The object DN should indicate it to 
be subordinate to an Alias object:(i.e. immediate superior is an Alias entry).
2. Provide a valid set of attributes for the entry {surname, "Ford"}, 
{description, "Administrator of Marketing"}, {objectClass, 
organizationalPerson}, {commonname, "jim"}.
3. The SecurityParameters and ServiceControls should be defaulted (i.e. empty).
4. Set the entry information to valid attribute types and values for the 
existing entry. Include the RDN attributes in the entry parameter.
5. The DSA will return an Error.
6. Read the entry using the initial DN. Another Error will be reported for this 
operation.

Expected Results: An UpdateError will be returned in response to the AddEntry 
operation with a namingViolation problem. The response to the Read operation 
will be a NameError with the problem noSuchObject.

2.4.5 Test REMOVE-001

Purpose: Test removal of a valid leaf entry.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=sales/cn=jim"
Test #2:
    1.  DN="c=us/o=y/ou=sales/cn=jim"
Test #3:
    1.  DN="c=us/o=y/ou=sales/cn=jim"
Test #4:
    1.  DN="c=us/o=y/ou=sales/cn=jim"
Test #5:
    1.  DN="c=us/o=y/ou=sales/cn=jim"
Test #6:
    1.  DN="c=us/o=y/ou=sales/cn=jim"
Test #7:
    1.  DN="c=us/o=y/ou=marketing/cn=jim"
Test #8:
    1.  DN="c=us/o=y/ou=marketing/cn=jim"

Procedure:

1. Provide a valid DN for a leaf entry.
2. Set the CommonArguments to default values.
3. The DSA will return a successful result.
4. Read the entry to insure that it has been deleted.

Expected Results: A RemoveEntry Result will be returned for the first
operation. The DSA response for the Read operation will be a NameError with
the problem noSuchObject.

2.4.6 Test REMOVE-002

Purpose: Test removal of a non-leaf object

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=sales"
Test #2:
    1.  DN="c=us/o=y/ou=sales"
Test #3:
    1.  DN="c=us/o=y/ou=sales"
Test #4:
    1.  DN="c=us/o=y/ou=sales"
Test #5:
    1.  DN="c=us/o=y/ou=sales"
Test #6:
    1.  DN="c=us/o=y/ou=sales"
Test #7:
    1.  DN="c=us/o=y/ou=marketing"
Test #8:
    1.  DN="c=us/o=y/ou=marketing"

Procedure:
1. Provide a DN for an existing non-leaf entry.
2. Set the CommonArguments to default values.
3. The DSA will return an Error.
4. Read the entry to insure it was not removed. The DSA will return a
Read Result with the entry information of the target.

Expected Results: An UpdateError will be returned for the RemoveEntry
operation with the problem set to notAllowedOnNonLeaf. The result of the
Read operation will contain the entry information of the target object.

2.4.7 Test REMOVE-003

Purpose: Test removal of a non-existent object.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=steve"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=steve"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=steve"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=steve"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=steve"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=steve"
Test #7:
    1.  DN="c=us/o=y/ou=marketing/cn=steve"
Test #8:
    1.  DN="c=us/o=y/ou=marketing/cn=steve"

Procedure:
1. Provide a DN for a non-existent object. The DN should be correctly formed
but identify an entry which does not exist in the DIT (i.e. specify the entry 
removed in REMOVE-005).
2. Set the CommonArguments to default values.
3. The DSA will return an Error. No subsequent Read operation is required.

Expected Results: The RemoveEntry operation should cause the DSA to return a 
NameError with the problem noSuchObject.

2.4.8  Test REMOVE-004

Purpose: Test removal of an entry with an Alias RDN.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=east/cn=steve"
Test #2:
    1.  DN="c=us/o=y/ou=east/cn=steve"
Test #3:
    1.  DN="c=us/o=y/ou=east/cn=steve"
Test #4:
    1.  DN="c=us/o=y/ou=east/cn=steve"
Test #5:
    1.  DN="c=us/o=y/ou=east/cn=steve"
Test #6:
    1.  DN="c=us/o=y/ou=east/cn=steve"
Test #7:
    1.  DN="c=us/o=y/ou=east/cn=steve"
Test #8:
    1.  DN="c=us/o=y/ou=east/cn=steve"

Procedure:
1. Provide a DN for an existing object entry. The DN should include an alias
RDN to designate the target entry.
2. Set the dontdereferenceAlias parameter of ServiceControls to allow alias 
dereferencing (i.e. dontDereferenceAlias = FALSE).
3. The DSA should return an Error.
4. Read the target object using the same DN to verify that it was not removed.

NOTES: This test is intended to verify that aliases cannot be used to designate 
a target object with Modify Port operations. Any target object must be 
designated with its full correct DN in order to be operated upon. Thus the 
normal means for referring to an object for a Read operation (i.e. using an 
alias) will vary from the means of referring to an entry for modification 
purposes.

Expected Results: The DSA will return a NameError with the problem 
aliasDereferenceProblem. The Read Result will contain the target entry to
verify that it was not removed.

2.4.10  Test MODIFY-001

Purpose: Test ModifyEntry by adding a several valid attributes to an object 
entry.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #7:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"
Test #8:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"

Procedure:
1. Provide a valid DN of an existing leaf entry.
2. In the changes parameter, supply several valid attributes. This is done by 
selecting addAttribute with a valid attribute several times (the changes 
parameter consists of a sequence of EntryModification values). Use localityName 
"OSIWorld", and telephone number "+123456".
3. Default the CommonArguments.
4. The DSA returns a ModifyEntry Result.
5. Read the object entry to verify that the changes were applied.

NOTES: For this test do not modify any RDN attributes and insure that the 
attributes added are consistent with the object class definition. The Read 
operation should indicate a selection of allAttributes and 
attributeTypesAndValues.

Expected Results: The ModifyEntry Result is empty. The Read Result should
return the complete entry with the additional attributes.

2.4.11  Test MODIFY-002

Purpose: Test ModifyEntry operation by removing several valid attributes.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #7:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"
Test #8:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"

Procedure:
1. Provide a valid DN for a leaf entry.
2. Select removeAttribute and provide a valid AttributeType. Use locality name 
and telephone number.
3. Default all other parameters of CommonArguments.
4. The DSA will return a ModifyEntry Result.
5. Read the target entry to verify that the attribute was removed from the 
entry.

NOTES: For this test do not remove an RDN attribute as this will cause an error.

Expected Results: The ModifyEntry Result is NULL. The Read Result contains the 
target entry information with all attributes except the one removed.

2.4.11  Test MODIFY-003

Purpose: Test the removal of all attributes in an entry.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #7:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"
Test #8:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"

Procedure:
1. Use a DN of a valid leaf entry.
2. Set the changes parameter to include a removeAttribute field for all 
attributes in the entry including the RDN attributes. Remove description, 
surname, common name.
3. The DSA will return an Error.
4. Read the target entry to verify that no changes were performed on the entry.

NOTES: The ModifyEntry operation is atomic. Either all changes requested are 
made or none of them are made. This should be verified with the Read operation.

Expected Results: The DSA will return an UpdateError with the problem 
notAllowedOnRDN. The Read Result will return the full entry with no changes.

2.4.12  Test MODIFY-004

Purpose: Test addition of a single attribute value to an existing attribute
in a leaf entry.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #7:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"
Test #8:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"

Procedure:
1. Provide a DN for an existing leaf object entry.
2. Select addValue for the changes parameter and supply a valid attribute type 
and value. Add description="new description text part1".
3. The DSA will respond with a ModifyEntry Result.
4. Read the entry to insure changes were correctly applied.

NOTES: The Read operation should indicate a selection which requests only the 
attribute types modified and attributeTypesAndValues to be returned.

Expected Results: The Read Result should indicate all attribute values added
are present in the object entry.

2.4.13  Test MODIFY-005

Purpose: Test ModifyEntry operation by adding multiple values to the same 
attribute.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #7:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"
Test #8:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"

Procedure:
1. Provide a valid DN for an existing non-leaf object.
2. Set the changes parameter to a sequence of addValue selections and provide 
several valid attribute values for the same attributeType. Add description
"New description text part 2", "New description text part 3"
3. The DSA will return a successful result.
4. Read the modified entry to verify that the attribute values were added 
correctly.

NOTES: The Read operation should indicate a selection which requests only the 
attribute type modified and attributeTypeAndValues to be returned.

Expected Results: The Read Result should indicate all attribute values added
are present in the object entry.

2.4.14  Test MODIFY-006

Purpose: Test adding a value to a non-existent attribute.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #7:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"
Test #8:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"

Procedure:
1. Provide a valid DN for an existing object entry.
2. Choose the addValue change with an nonexistent attributeType 
(postalCode=12345-2357).
3. The DSA will return an Error.
4. Read the target entry to verify that the entry was not modified

NOTES: The attributeType specified should be a valid type for the object
class but not exist in the entry. This test attempts to add a value to the 
attribute before it exists in the entry.

Expected Results: The AttributeError returned will state the problem as 
noSuchAttributeOrValue.

The Read Result will show the entry as it was before the ModifyEntry operation 
was performed.

2.4.15  Test MODIFY-007

Purpose: Test the removal of an existing value.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #7:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"
Test #8:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"

Procedure:
1. Provide a valid DN of an existing leaf object.
2. Select the removeValue function in the changes parameter with an existing 
attribute type and value. Remove description="New description text part 1"
3. The DSA will return a ModifyEntry Result with no information.
4. Read the target object entry to insure that the attribute value has been 
removed.

NOTES: The attribute value removed should not be the last value for the 
attribute. It is an error for an unvalued attribute to exist in an entry.

Expected Results: The Read Result will reflect the removal of the specified 
value in the entry.

2.4.16  Test MODIFY-008

Purpose: Test removal of a non-existent value in a valid attribute.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #7:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"
Test #8:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"

Procedure:
1. Provide a valid DN of a non-leaf object entry.
2. Select the removeValue function and provide a non-existing value for the 
specified attribute. Remove description="NonExistent".
3. The DSA will return an Error.
4. Read the target entry to insure no changes were made.

Expected Results: The DSA will return an AttributeError indicating the 
noSuchAttributeOrValue problem. The subsequent Read operation will
confirm that no changes were made to the entry.

2.4.19  Test MODIFY-009

Purpose: Test the removal of several valid attribute values.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #7:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"
Test #8:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"

Procedure:
1. Use a valid DN for the object parameter.
2. Select several removeValue changes and provide valid attribute types and 
values for each. Remove description= "New description text part 2" and "New 
description text part 3".
3. The DSA will return a ModifyEntry Result
4. The Read operation will verify that the changes were correctly made to the 
entry.

Expected Results: The Read Result will indicate that all values were removed 
correctly.

2.4.18  Test MODIFY-010

Purpose: Test removal of all values of an attribute.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #7:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"
Test #8:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"

Procedure:
1. Provide a valid DN for a leaf object.
2. Select the removeValue function to remove all values of one particular 
attribute other than a naming attribute. For Tests #1-6, use 
description="Director of Marketing". For Tests #7-8, use description="salesman".
3. The DSA will return an Error.
4. Read the object entry to insure that no changes were made.

NOTES: If the DSA performs this operation and removes all values of a
particular attribute then the attribute will have a NULL value which violates 
the structure rules defined in X.501 7.2.3.

Expected Results: The removal of all attributes would leave the attribute in
an invalid state. Thus the operation should be rejected with an UpdateError
and the problem objectClassViolation. The Read operation should confirm that
the entry was unchanged.

2.4.19  Test MODIFY-011

Purpose: Test the addition of an attribute and removal of the same attribute in 
a single operation.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #7:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"
Test #8:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"


Procedure:
1. Use the DN of a valid leaf object entry.
2. Select the addAttribute with a valid attribute type and value: select 
removeAttribute with the AttributeType previously added. Add faxTelephoneNumber 
"+12345" and remove faxTelephoneNumber.
3. The DSA will return a successful result.
4. Read the entry to verify that there is no net change in the entry.

Expected Results: The Read Result will contain the target entry with no new 
attributes in the entry.

2.4.20  Test MODIFY-012

Purpose: Test the addition of a valid attribute value and the removal of an 
unknown one in the same operation.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_west/cn=kevin"
Test #7:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"
Test #8:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"

Procedure:
1. Use a valid DN to identify an existing object entry.
2. Select the addValue function and provide a valid attribute type and value: 
Concurrently select the remove Value function and provide a valid attribute 
type and an invalid attribute value. Add faxtelephoneNumber="+123456" and
remove localityName="OSIWorld".
3. The DSA will return an Error.
4. Read the entry to insure that no changes were made.

Expected Results: The AttributeError returned by the DSA should indicate that 
the problem is noSuchAttributeOrValue. The Read Result will show that the
entry has not changed because the operation is atomic.

2.4.21  Test MODIFY-013

Purpose: Test the removal of the aliasedObjectName attribute of an Alias entry.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=salesman"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=salesman"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=salesman"
Test #4:
   1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=salesman"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=salesman"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=salesman"
Test #7:
    1.  DN="c=us/o=y/ou=east"
Test #8:
    1.  DN="c=us/o=y/ou=east"

Procedure:
1. Provide a DN for an existing Alias object entry.
2. Select removeValue with the aliasedObjectName attribute type and the
existing value of the attribute. For Tests #1-6, remove 
aliasedObjectName="ou=sales_hq/cn=Jerry" and for Tests #7-8, remove 
aliasedObjectName="ou=mrkt_east".
3. The DSA should return an Error as in MODIFY-O10.
4. Read the entry and verify that no changes were made to the Alias entry.

Expected Results: An UpdateError with the problem objectClassViolation should
be returns

2.4.22  Test MODIFYRDN-001

Purpose: Test ModifyRDN by changing RDN value without deleting the old RDN 
value.

Perform the following procedure for each of these tests per section 1.2.4.:

Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=steve"
Test #7:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"
Test #8:
    1.  DN="c=us/o=y/ou=sales_hq/cn=jerry"

Procedure:
1. Provide a valid DN of an existing leaf entry.
2. Issue the modifyRDN operation setting deleteOldRDN to FALSE.  Change "steve" 
to "stephen" in Tests #1-6 and "jerry" to "gerald" in Tests # 7-8.
3. Default the CommonArguments.
4. The DSA returns a ModifyRDN Result.
5. Read the object entry to verify that the changes were applied.

Expected Results: The ModifyRDN Result is empty. The Read Result should return 
the complete entry with the modified RDN.

2.4.23  Test MODIFYRDN-002

Purpose: Test ModifyRDN by changing RDN value while deleting the old RDN value.

Perform the following procedure for each of these tests per section 1.2.4.:

FALSE
Test #1:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=stephen"
Test #2:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=stephen"
Test #3:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=stephen"
Test #4:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=stephen"
Test #5:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=stephen"
Test #6:
    1.  DN="c=us/o=y/ou=marketing/ou=mrkt_east/cn=stephen"
Test #7:
    1.  DN="c=us/o=y/ou=sales_hq/cn=gerald"
Test #8:
    1.  DN="c=us/o=y/ou=sales_hq/cn=gerald"

Procedure:
1. To setup for this test, issue a modify operation to remove the 
nondistinguished value (commonname=steve for Tests #1-6, commonname=jerry for 
Tests #7-8) from the RDN attribute.
2. Issue the modifyRDN operation setting deleteOldRDN to TRUE.  Change
"stephen" to "steve" in Tests #1-6 and "gerald" to "jerry" in Tests # 7-8.
3. Default the CommonArguments.
4. The DSA returns a ModifyRDN Result.
5. Read the object entry to verify that the changes were applied.

Expected Results: The ModifyRDN Result is empty. The Read Result should return 
the complete entry with the modified RDN and the old RDN values removed.