#50471 Issue: 48851 - Add more test cases to the match test suite(mode replace)
Closed 3 years ago by spichugi. Opened 4 years ago by aborah.
aborah/389-ds-base match_part1  into  master

@@ -285,6 +285,106 @@ 

       'negative': ['AAAAAAAAAAAAAAE=', 'AAAAAAAAAAAAAAI=', 'AAAAAAAAAAAAAAM=', 'AAAAAAAAAAAAAAQ=',

                    'AAAAAAAAAAAAAAU=', 'AAAAAAAAAAAAAAY=']}]

  

+ MODE_REPLACE = [

+     {'attr': 'attrbitStringMatch',

+      'positive': ["'0001'B", "'0010'B", "'0011'B", "'0100'B", "'0101'B", "'0110'B"],

+      'negative': ["'0001'B", "'0001'B", "'0010'B", "'0010'B", "'0011'B", "'0011'B",

+                   "'0100'B", "'0100'B", "'0101'B", "'0101'B", "'0110'B", "'0110'B"]},

+     {'attr': 'attrcaseExactIA5Match',

+      'positive': ['Sprain', 'sPrain', 'spRain', 'sprAin', 'spraIn', 'sprain'],

+      'negative': ['Sprain', 'Sprain', 'sPrain', 'sPrain', 'spRain', 'spRain',

+                   'sprAin', 'sprAin', 'spraIn', 'spraIn', 'sprain', 'sprain']},

+     {'attr': 'attrcaseExactMatch',

+      'positive': ['ÇélIné Ändrè', 'ÇéliNé Ändrè', 'Çéliné ÄndrÈ', 'Çéliné Ändrè',

+                   'çÉliné Ändrè'],

+      'negative': ['ÇélIné Ändrè', 'ÇélIné Ändrè', 'ÇéliNé Ändrè', 'ÇéliNé Ändrè',

+                   'Çéliné ÄndrÈ', 'Çéliné ÄndrÈ', 'Çéliné Ändrè', 'Çéliné Ändrè',

+                   'çÉliné Ändrè', 'çÉliné Ändrè']},

+     {'attr': 'attrgeneralizedTimeMatch',

+      'positive': ['20100218171300Z', '20100218171301Z', '20100218171302Z', '20100218171303Z',

+                   '20100218171304Z', '20100218171305Z'],

+      'negative': ['20100218171300Z', '20100218171300Z', '20100218171301Z', '20100218171301Z',

+                   '20100218171302Z', '20100218171302Z', '20100218171303Z', '20100218171303Z',

+                   '20100218171304Z', '20100218171304Z', '20100218171305Z', '20100218171305Z']},

+     {'attr': 'attrbooleanMatch',

+      'positive': ['TRUE', 'FALSE'],

+      'negative': ['TRUE', 'TRUE', 'FALSE', 'FALSE']},

+     {'attr': 'attrcaseIgnoreIA5Match',

+      'positive': ['sprain1', 'sprain2', 'sprain3', 'sprain4', 'sprain5', 'sprain6'],

+      'negative': ['sprain1', 'sprain1', 'sprain2', 'sprain2', 'sprain3', 'sprain3',

+                   'sprain4', 'sprain4', 'sprain5', 'sprain5', 'sprain6', 'sprain6']},

+     {'attr': 'attrcaseIgnoreMatch',

+      'positive': ['ÇélIné Ändrè1', 'ÇélIné Ändrè2', 'ÇélIné Ändrè3', 'ÇélIné Ändrè4',

+                   'ÇélIné Ändrè5', 'ÇélIné Ändrè6'],

+      'negative': ['ÇélIné Ändrè1', 'ÇélIné Ändrè1', 'ÇélIné Ändrè2', 'ÇélIné Ändrè2',

+                   'ÇélIné Ändrè3', 'ÇélIné Ändrè3', 'ÇélIné Ändrè4', 'ÇélIné Ändrè4',

+                   'ÇélIné Ändrè5', 'ÇélIné Ändrè5', 'ÇélIné Ändrè6', 'ÇélIné Ändrè6']},

+     {'attr': 'attrcaseIgnoreListMatch',

+      'positive': ['foo1$bar', 'foo2$bar', 'foo3$bar', 'foo4$bar', 'foo5$bar', 'foo6$bar'],

+      'negative': ['foo1$bar', 'foo1$bar', 'foo2$bar', 'foo2$bar', 'foo3$bar', 'foo3$bar',

+                   'foo4$bar', 'foo4$bar', 'foo5$bar', 'foo5$bar', 'foo6$bar', 'foo6$bar']},

+     {'attr': 'attrobjectIdentifierFirstComponentMatch',

+      'positive': ['1.3.6.1.4.1.1466.115.121.1.15', '1.3.6.1.4.1.1466.115.121.1.24',

+                   '1.3.6.1.4.1.1466.115.121.1.26', '1.3.6.1.4.1.1466.115.121.1.40',

+                   '1.3.6.1.4.1.1466.115.121.1.41', '1.3.6.1.4.1.1466.115.121.1.6'],

+      'negative': ['1.3.6.1.4.1.1466.115.121.1.15', '1.3.6.1.4.1.1466.115.121.1.15',

+                   '1.3.6.1.4.1.1466.115.121.1.24', '1.3.6.1.4.1.1466.115.121.1.24',

+                   '1.3.6.1.4.1.1466.115.121.1.26', '1.3.6.1.4.1.1466.115.121.1.26',

+                   '1.3.6.1.4.1.1466.115.121.1.40', '1.3.6.1.4.1.1466.115.121.1.40',

+                   '1.3.6.1.4.1.1466.115.121.1.41', '1.3.6.1.4.1.1466.115.121.1.41',

+                   '1.3.6.1.4.1.1466.115.121.1.6', '1.3.6.1.4.1.1466.115.121.1.6']},

+     {'attr': 'attrdistinguishedNameMatch',

+      'positive': ['cn=foo1,cn=bar', 'cn=foo2,cn=bar', 'cn=foo3,cn=bar', 'cn=foo4,cn=bar',

+                   'cn=foo5,cn=bar', 'cn=foo6,cn=bar'],

+      'negative': ['cn=foo1,cn=bar', 'cn=foo1,cn=bar', 'cn=foo2,cn=bar', 'cn=foo2,cn=bar',

+                   'cn=foo3,cn=bar', 'cn=foo3,cn=bar', 'cn=foo4,cn=bar', 'cn=foo4,cn=bar',

+                   'cn=foo5,cn=bar', 'cn=foo5,cn=bar', 'cn=foo6,cn=bar', 'cn=foo6,cn=bar']},

+     {'attr': 'attrintegerMatch',

+      'positive': ['-2', '-1', '0', '1', '2', '3'],

+      'negative': ['-2', '-2', '-1', '-1', '0', '0', '1', '1', '2', '2', '3', '3']},

+     {'attr': 'attrintegerFirstComponentMatch',

+      'positive': ['-2', '-1', '0', '1', '2', '3'],

+      'negative': ['-2', '-2', '-1', '-1', '0', '0', '1', '1', '2', '2', '3', '3']},

+     {'attr': 'attruniqueMemberMatch',

+      'positive': ["cn=foo1,cn=bar#'0001'B", "cn=foo2,cn=bar#'0010'B", "cn=foo3,cn=bar#'0011'B",

+                   "cn=foo4,cn=bar#'0100'B", "cn=foo5,cn=bar#'0101'B", "cn=foo6,cn=bar#'0110'B"],

+      'negative': ["cn=foo1,cn=bar#'0001'B", "cn=foo1,cn=bar#'0001'B", "cn=foo2,cn=bar#'0010'B",

+                   "cn=foo2,cn=bar#'0010'B", "cn=foo3,cn=bar#'0011'B", "cn=foo3,cn=bar#'0011'B",

+                   "cn=foo4,cn=bar#'0100'B", "cn=foo4,cn=bar#'0100'B", "cn=foo5,cn=bar#'0101'B",

+                   "cn=foo5,cn=bar#'0101'B", "cn=foo6,cn=bar#'0110'B", "cn=foo6,cn=bar#'0110'B"]},

+     {'attr': 'attrnumericStringMatch',

+      'positive': ['00001', '00002', '00003', '00004', '00005', '00006'],

+      'negative': ['00001', '00001', '00002', '00002', '00003', '00003', '00004', '00004', '00005',

+                   '00005', '00006', '00006']},

+     {'attr': 'attrtelephoneNumberMatch',

+      'positive': ['+1 408 555 4798', '+1 408 555 5625', '+1 408 555 6201', '+1 408 555 8585',

+                   '+1 408 555 9187', '+1 408 555 9423'],

+      'negative': ['+1 408 555 4798', '+1 408 555 4798', '+1 408 555 5625', '+1 408 555 5625',

+                   '+1 408 555 6201', '+1 408 555 6201', '+1 408 555 8585', '+1 408 555 8585',

+                   '+1 408 555 9187', '+1 408 555 9187', '+1 408 555 9423', '+1 408 555 9423']},

+     {'attr': 'attroctetStringMatch',

+      'positive': ['AAAAAAAAAAAAAAE=', 'AAAAAAAAAAAAAAI=', 'AAAAAAAAAAAAAAM=', 'AAAAAAAAAAAAAAQ=',

+                   'AAAAAAAAAAAAAAU=', 'AAAAAAAAAAAAAAY='],

+      'negative': ['AAAAAAAAAAAAAAE=', 'AAAAAAAAAAAAAAE=', 'AAAAAAAAAAAAAAI=', 'AAAAAAAAAAAAAAI=',

+                   'AAAAAAAAAAAAAAM=', 'AAAAAAAAAAAAAAM=', 'AAAAAAAAAAAAAAQ=', 'AAAAAAAAAAAAAAQ=',

+                   'AAAAAAAAAAAAAAU=', 'AAAAAAAAAAAAAAU=', 'AAAAAAAAAAAAAAY=', 'AAAAAAAAAAAAAAY=']},

+     {'attr': 'attrobjectIdentifierMatch',

+      'positive': ['1.3.6.1.4.1.1466.115.121.1.15', '1.3.6.1.4.1.1466.115.121.1.24',

+                   '1.3.6.1.4.1.1466.115.121.1.26', '1.3.6.1.4.1.1466.115.121.1.40',

+                   '1.3.6.1.4.1.1466.115.121.1.41', '1.3.6.1.4.1.1466.115.121.1.6'],

+      'negative': ['1.3.6.1.4.1.1466.115.121.1.15', '1.3.6.1.4.1.1466.115.121.1.15',

+                   '1.3.6.1.4.1.1466.115.121.1.24', '1.3.6.1.4.1.1466.115.121.1.24',

+                   '1.3.6.1.4.1.1466.115.121.1.26', '1.3.6.1.4.1.1466.115.121.1.26',

+                   '1.3.6.1.4.1.1466.115.121.1.40', '1.3.6.1.4.1.1466.115.121.1.40',

+                   '1.3.6.1.4.1.1466.115.121.1.41', '1.3.6.1.4.1.1466.115.121.1.41',

+                   '1.3.6.1.4.1.1466.115.121.1.6', '1.3.6.1.4.1.1466.115.121.1.6']},

+     {'attr': 'attrdirectoryStringFirstComponentMatch',

+      'positive': ['ÇélIné Ändrè1', 'ÇélIné Ändrè2', 'ÇélIné Ändrè3', 'ÇélIné Ändrè4',

+                   'ÇélIné Ändrè5', 'ÇélIné Ändrè6'],

+      'negative': ['ÇélIné Ändrè1', 'ÇélIné Ändrè1', 'ÇélIné Ändrè2', 'ÇélIné Ändrè2',

+                   'ÇélIné Ändrè3', 'ÇélIné Ändrè3', 'ÇélIné Ändrè4', 'ÇélIné Ändrè4',

+                   'ÇélIné Ändrè5', 'ÇélIné Ändrè5', 'ÇélIné Ändrè6', 'ÇélIné Ändrè6']}]

+ 

  

  def test_matching_rules(topology_st):

      """Test matching rules.
@@ -333,6 +433,7 @@ 

              2. Pass

              3. Fail

      """

+     # Entry with extensibleObject

      cos = CosTemplates(topology_st.standalone, DEFAULT_SUFFIX)

      cos.create(properties={'cn': 'addentry'+rule['attr'].split('attr')[1],

                             rule['attr']: rule['positive']})
@@ -358,6 +459,7 @@ 

              2. Fail

              3. Pass

      """

+     # Entry with extensibleObject

      cos = CosTemplates(topology_st.standalone, DEFAULT_SUFFIX)

      cos.create(properties={'cn': 'addentry'+mode['attr'].split('attr')[1],

                             mode['attr']: mode['positive']})
@@ -367,6 +469,44 @@ 

          entry.delete()

  

  

+ @pytest.mark.parametrize("mode", MODE_REPLACE)

+ def test_valid_invalid_mode_replace(topology_st, mode):

+     """Test valid and invalid values of attributes

+         :id: 7ec19eca-8cfc-11e9-a0df-8c16451d917b

+         :setup: Standalone

+         :steps:

+             1. Create entry with an attribute that uses that matching rule

+             2. Replace an attribute that uses that matching rule

+             3. Replace an attribute that uses that matching rule providing duplicate

+             values that are duplicates according to the equality matching mode.

+             4. Delete existing attribute

+             5. Try to delete the deleted attribute again.

+             6. Delete entry

+         :expected results:

+             1. Pass

+             2. Pass

+             3. Fail(ldap.TYPE_OR_VALUE_EXISTS)

+             4. Pass

+             5. Fail(ldap.NO_SUCH_ATTRIBUTE)

+             6. Pass

+     """

+     # Entry with extensibleObject

+     cos = CosTemplates(topology_st.standalone, DEFAULT_SUFFIX)

+     cos.create(properties={'cn': 'addentry'+mode['attr'].split('attr')[1]})

+ 

+     # Replace Operation

+     user = cos.list()[0]

+     user.replace(mode['attr'], mode['positive'])

+     with pytest.raises(ldap.TYPE_OR_VALUE_EXISTS):

+         user.replace(mode['attr'], mode['negative'])

+     # Delete Operation

+     user.remove(mode['attr'], mode['positive'][0])

+     with pytest.raises(ldap.NO_SUCH_ATTRIBUTE):

+         user.remove(mode['attr'], mode['positive'][0])

+     for entry in cos.list():

+         entry.delete()

+ 

+ 

  if __name__ == '__main__':

      CURRENT_FILE = os.path.realpath(__file__)

      pytest.main("-s -v %s" % CURRENT_FILE)

Bug Description: Add more test cases to the match test suite(mode replace)

Relates/Fixes: https://pagure.io/389-ds-base/issue/48851

Author: aborah

Reviewed by: ???

rebased onto 6c4bab7f8f9ff8efe3c1cd82883e9c447a985611

4 years ago

rebased onto 0d81c52c3b3f8ef88d7bee267d26160f0cd0594d

4 years ago

In the code, this step is expected to succeed.

If it fails with some exact exception, please, specify the exception here.

rebased onto 8b34b176e9f2c19608a247c75d9c451a3f9dd7b4

4 years ago

rebased onto dcf06dc492dbd1de8b7e4e6cd1eca83a68bac5e9

4 years ago

@spichugi, changes are done (re based forcefully as it was minor change .)

rebased onto 64e457a

4 years ago

Please, specify the exception here.

Done

Pull-Request has been merged by spichugi

4 years ago

389-ds-base is moving from Pagure to Github. This means that new issues and pull requests
will be accepted only in 389-ds-base's github repository.

This pull request has been cloned to Github as issue and is available here:
- https://github.com/389ds/389-ds-base/issues/3528

If you want to continue to work on the PR, please navigate to the github issue,
download the patch from the attachments and file a new pull request.

Thank you for understanding. We apologize for all inconvenience.

Pull-Request has been closed by spichugi

3 years ago
Metadata