def testComplex(self): a = entry.BaseLDAPEntry( dn='cn=Paula Jensen,ou=Product Development,dc=airius,dc=com', attributes={ 'description': ['Something'], 'telephonenumber': ['+123 456'], 'facsimiletelephonenumber': ['+1 408 555 9876'], }) b = entry.BaseLDAPEntry( dn='cn=Paula Jensen,ou=Product Development,dc=airius,dc=com', attributes={ 'postalAddress': ['123 Anystreet $ Sunnyvale, CA $ 94086'], 'telephonenumber': ['+1 408 555 1234', '+1 408 555 5678'], }) result = a.diff(b) self.assertEquals( result, delta.ModifyOp( 'cn=Paula Jensen,ou=Product Development,dc=airius,dc=com', [ delta.Add('postalAddress', ['123 Anystreet $ Sunnyvale, CA $ 94086']), delta.Delete('description', ['Something']), delta.Delete('facsimiletelephonenumber', ['+1 408 555 9876']), delta.Add('telephonenumber', ['+1 408 555 1234', '+1 408 555 5678']), delta.Delete('telephonenumber', ['+123 456']), ]))
def test_modify(self): self.server.dataReceived( str( pureldap.LDAPMessage(pureldap.LDAPModifyRequest( self.stuff.dn, modification=[ delta.Add('foo', ['bar']).asLDAP(), ], ), id=2))) self.assertEquals( self.server.transport.value(), str( pureldap.LDAPMessage(pureldap.LDAPModifyResponse( resultCode=ldaperrors.Success.resultCode), id=2)), ) # tree changed self.assertEquals( self.stuff, inmemory.ReadOnlyInMemoryLDAPEntry('ou=stuff,dc=example,dc=com', { 'objectClass': ['a', 'b'], 'ou': ['stuff'], 'foo': ['bar'] }))
def testModify(self): op=delta.ModifyOp('cn=Paula Jensen, ou=Product Development, dc=airius, dc=com', [ delta.Add('postaladdress', ['123 Anystreet $ Sunnyvale, CA $ 94086']), delta.Delete('description'), delta.Replace('telephonenumber', ['+1 408 555 1234', '+1 408 555 5678']), delta.Delete('facsimiletelephonenumber', ['+1 408 555 9876']), ]) self.assertEquals(op.asLDIF(), """\ dn: cn=Paula Jensen,ou=Product Development,dc=airius,dc=com changetype: modify add: postaladdress postaladdress: 123 Anystreet $ Sunnyvale, CA $ 94086 - delete: description - replace: telephonenumber telephonenumber: +1 408 555 1234 telephonenumber: +1 408 555 5678 - delete: facsimiletelephonenumber facsimiletelephonenumber: +1 408 555 9876 - """)
def cb3(got): self.assertEquals(got, [ delta.ModifyOp( self.empty.dn, [delta.Add('foo', ['bar'])], ), ])
def testAdd_New_ManyTypes(self): a = entry.BaseLDAPEntry(dn='dc=foo', attributes={ 'foo': ['bar'], }) b = entry.BaseLDAPEntry(dn='dc=foo', attributes={ 'foo': ['bar'], 'baz': ['quux'], 'bang': ['thud'], }) result = a.diff(b) self.assertEquals( result, delta.ModifyOp('dc=foo', [ delta.Add('bang', ['thud']), delta.Add('baz', ['quux']), ]))
def testModifyOp_DNNotFound(self): op = delta.ModifyOp('cn=nope,dc=example,dc=com', [delta.Add('foo', ['bar'])]) d = op.patch(self.root) def eb(fail): fail.trap(ldaperrors.LDAPNoSuchObject) d.addCallbacks(testutil.mustRaise, eb) return d
def testAdd(self): m=delta.Add('foo', ['bar', 'baz']) self.assertEquals(m.asLDIF(), """\ add: foo foo: bar foo: baz - """)
def diff(self, other): """ Compute differences between this and another LDAP entry. @param other: An LDAPEntry to compare to. @return: None if equal, otherwise a ModifyOp that would make this entry look like other. """ assert self.dn == other.dn if self == other: return None r = [] myKeys = sets.Set(self.keys()) otherKeys = sets.Set(other.keys()) addedKeys = list(otherKeys - myKeys) addedKeys.sort() # for reproducability only for added in addedKeys: r.append(delta.Add(added, other[added])) deletedKeys = list(myKeys - otherKeys) deletedKeys.sort() # for reproducability only for deleted in deletedKeys: r.append(delta.Delete(deleted, self[deleted])) sharedKeys = list(myKeys & otherKeys) sharedKeys.sort() # for reproducability only for shared in sharedKeys: addedValues = list(other[shared] - self[shared]) if addedValues: addedValues.sort() # for reproducability only r.append(delta.Add(shared, addedValues)) deletedValues = list(self[shared] - other[shared]) if deletedValues: deletedValues.sort() # for reproducability only r.append(delta.Delete(shared, deletedValues)) return delta.ModifyOp(dn=self.dn, modifications=r)
def testModification_complex(self): proto = LDIFDeltaDriver() proto.dataReceived("""\ version: 1 dn: cn=foo,dc=example,dc=com changetype: modify delete: foo foo: bar - delete: garply - add: thud thud: quux thud: baz - replace: waldo - add: foo foo: baz - replace: thud thud: xyzzy - add: silly - """) proto.connectionLost() self.assertEqual( proto.listOfCompleted, [delta.ModifyOp(dn='cn=foo,dc=example,dc=com', modifications=[delta.Delete('foo', ['bar']), delta.Delete('garply'), delta.Add('thud', ['quux', 'baz']), delta.Replace('waldo'), delta.Add('foo', ['baz']), delta.Replace('thud', ['xyzzy']), delta.Add('silly'), ]), ])
def testAdd_Existing_OneType_OneValue(self): a = entry.BaseLDAPEntry(dn='dc=foo', attributes={ 'foo': ['bar'], }) b = entry.BaseLDAPEntry(dn='dc=foo', attributes={ 'foo': ['bar', 'quux'], }) result = a.diff(b) self.assertEquals( result, delta.ModifyOp('dc=foo', [ delta.Add('foo', ['quux']), ]))
def testModification_twoAdds(self): proto = LDIFDeltaDriver() proto.dataReceived("""\ version: 1 dn: cn=foo,dc=example,dc=com changetype: modify add: foo foo: bar - add: thud thud: quux thud: baz - """) proto.connectionLost() self.assertEqual( proto.listOfCompleted, [delta.ModifyOp(dn='cn=foo,dc=example,dc=com', modifications=[delta.Add('foo', ['bar']), delta.Add('thud', ['quux', 'baz']), ]), ])
def testRootChange_Add(self): a = inmemory.ReadOnlyInMemoryLDAPEntry('dc=example,dc=com', { 'dc': ['example'], }) b = inmemory.ReadOnlyInMemoryLDAPEntry('dc=example,dc=com', { 'dc': ['example'], 'foo': ['bar'], }) d = a.diffTree(b) d.addCallback(self.assertEquals, [ delta.ModifyOp('dc=example,dc=com', [ delta.Add('foo', ['bar']), ]), ]) return d
def testAddNew(self): mod = delta.Add('stuff', ['val1', 'val2']) mod.patch(self.foo) self.failUnlessEqual(self.foo['stuff'], ['val1', 'val2']) self.failUnlessEqual(self.foo['cn'], ['foo', 'thud'])
def testEquality_List_False(self): a = delta.Add('k', ['b', 'c', 'd']) b = ['b', 'c', 'd'] self.assertNotEquals(a, b)
def testEquality_AttributeSet_False(self): a = delta.Add('k', ['b', 'c', 'd']) b = attributeset.LDAPAttributeSet('k', ['b', 'c', 'd']) self.assertNotEquals(a, b)
def testEquality_AddVsDelete_False(self): a = delta.Add('k', ['b', 'c', 'd']) b = delta.Delete('k', ['b', 'c', 'd']) self.assertNotEquals(a, b)
def testAddOld(self): mod = delta.Add('cn', ['quux']) mod.patch(self.foo) self.failIf('stuff' in self.foo) self.failUnlessEqual(self.foo['cn'], ['foo', 'thud', 'quux'])
def testEquality_Add_True(self): a = delta.Add('k', ['b', 'c', 'd']) b = delta.Add('k', ['b', 'c', 'd']) self.assertEquals(a, b)
def update(self, sequence): self.ldapObject.journal(delta.Add(self.key, sequence)) super(JournaledLDAPAttributeSet, self).update(sequence)
def add(self, value): self.ldapObject.journal(delta.Add(self.key, [value])) super(JournaledLDAPAttributeSet, self).add(value)