| |
@@ -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: ???