コード例 #1
0
 def _test_helper(self, init_db, expected_ret, replace, delete_others=False):
     _init_db(copy.deepcopy(init_db))
     old = _dump_db()
     new = _dump_db()
     expected_db = copy.deepcopy(init_db)
     for dn, attrs in replace.items():
         for attr, vals in attrs.items():
             vals = [to_bytes(val) for val in vals]
             if vals:
                 new.setdefault(dn, {})[attr] = list(OrderedSet(vals))
                 expected_db.setdefault(dn, {})[attr] = OrderedSet(vals)
             elif dn in expected_db:
                 new[dn].pop(attr, None)
                 expected_db[dn].pop(attr, None)
         if not expected_db.get(dn, {}):
             new.pop(dn, None)
             expected_db.pop(dn, None)
     if delete_others:
         dn_to_delete = OrderedSet()
         for dn, attrs in expected_db.items():
             if dn in replace:
                 to_delete = OrderedSet()
                 for attr, vals in attrs.items():
                     if attr not in replace[dn]:
                         to_delete.add(attr)
                 for attr in to_delete:
                     del attrs[attr]
                     del new[dn][attr]
                 if not attrs:
                     dn_to_delete.add(dn)
         for dn in dn_to_delete:
             del new[dn]
             del expected_db[dn]
     name = "ldapi:///"
     expected_ret["name"] = name
     expected_ret.setdefault("result", True)
     expected_ret.setdefault("comment", "Successfully updated LDAP entries")
     expected_ret.setdefault(
         "changes",
         {
             dn: {
                 "old": {
                     attr: vals
                     for attr, vals in old[dn].items()
                     if vals != new.get(dn, {}).get(attr, ())
                 }
                 if dn in old
                 else None,
                 "new": {
                     attr: vals
                     for attr, vals in new[dn].items()
                     if vals != old.get(dn, {}).get(attr, ())
                 }
                 if dn in new
                 else None,
             }
             for dn in replace
             if old.get(dn, {}) != new.get(dn, {})
         },
     )
     entries = [
         {dn: [{"replace": attrs}, {"delete_others": delete_others}]}
         for dn, attrs in replace.items()
     ]
     actual = salt.states.ldap.managed(name, entries)
     self.assertDictEqual(expected_ret, actual)
     self.assertDictEqual(expected_db, db)
コード例 #2
0
 def _test_helper(self,
                  init_db,
                  expected_ret,
                  replace,
                  delete_others=False):
     _init_db(copy.deepcopy(init_db))
     old = _dump_db()
     new = _dump_db()
     expected_db = copy.deepcopy(init_db)
     for dn, attrs in six.iteritems(replace):
         for attr, vals in six.iteritems(attrs):
             if len(vals):
                 new.setdefault(dn, {})[attr] = list(OrderedSet(vals))
                 expected_db.setdefault(dn, {})[attr] = OrderedSet(vals)
             elif dn in expected_db:
                 new[dn].pop(attr, None)
                 expected_db[dn].pop(attr, None)
         if not len(expected_db.get(dn, {})):
             new.pop(dn, None)
             expected_db.pop(dn, None)
     if delete_others:
         dn_to_delete = OrderedSet()
         for dn, attrs in six.iteritems(expected_db):
             if dn in replace:
                 to_delete = OrderedSet()
                 for attr, vals in six.iteritems(attrs):
                     if attr not in replace[dn]:
                         to_delete.add(attr)
                 for attr in to_delete:
                     del attrs[attr]
                     del new[dn][attr]
                 if not len(attrs):
                     dn_to_delete.add(dn)
         for dn in dn_to_delete:
             del new[dn]
             del expected_db[dn]
     name = 'ldapi:///'
     expected_ret['name'] = name
     expected_ret.setdefault('result', True)
     expected_ret.setdefault('comment', 'Successfully updated LDAP entries')
     expected_ret.setdefault(
         'changes',
         dict(((dn, {
             'old':
             dict((attr, vals) for attr, vals in six.iteritems(old[dn])
                  if vals != new.get(dn, {}).get(attr, ()))
             if dn in old else None,
             'new':
             dict((attr, vals) for attr, vals in six.iteritems(new[dn])
                  if vals != old.get(dn, {}).get(attr, ()))
             if dn in new else None
         }) for dn in replace if old.get(dn, {}) != new.get(dn, {}))))
     entries = [{
         dn: [{
             'replace': attrs
         }, {
             'delete_others': delete_others
         }]
     } for dn, attrs in six.iteritems(replace)]
     actual = salt.states.ldap.managed(name, entries)
     self.assertDictEqual(expected_ret, actual)
     self.assertDictEqual(expected_db, db)
コード例 #3
0
def _test_helper_add(db, expected_ret, add_items, delete_others=False):
    old = db.dump_db()
    new = db.dump_db()
    expected_db = copy.deepcopy(db.db)
    for dn, attrs in add_items.items():
        for attr, vals in attrs.items():
            vals = [to_bytes(val) for val in vals]

            vals.extend(old.get(dn, {}).get(attr, OrderedSet()))
            vals.sort()

            if vals:
                new.setdefault(dn, {})[attr] = list(OrderedSet(vals))
                expected_db.setdefault(dn, {})[attr] = OrderedSet(vals)
            elif dn in expected_db:
                new[dn].pop(attr, None)
                expected_db[dn].pop(attr, None)
        if not expected_db.get(dn, {}):
            new.pop(dn, None)
            expected_db.pop(dn, None)
    if delete_others:
        dn_to_delete = OrderedSet()
        for dn, attrs in expected_db.items():
            if dn in add_items:
                to_delete = OrderedSet()
                for attr, vals in attrs.items():
                    if attr not in add_items[dn]:
                        to_delete.add(attr)
                for attr in to_delete:
                    del attrs[attr]
                    del new[dn][attr]
                if not attrs:
                    dn_to_delete.add(dn)
        for dn in dn_to_delete:
            del new[dn]
            del expected_db[dn]
    name = "ldapi:///"
    expected_ret["name"] = name
    expected_ret.setdefault("result", True)
    expected_ret.setdefault("comment", "Successfully updated LDAP entries")
    expected_ret.setdefault(
        "changes",
        {
            dn: {
                "old": {
                    attr: vals
                    for attr, vals in old[dn].items()
                    if vals != new.get(dn, {}).get(attr, ())
                } if dn in old else None,
                "new": {
                    attr: vals
                    for attr, vals in new[dn].items()
                    if vals != old.get(dn, {}).get(attr, ())
                } if dn in new else None,
            }
            for dn in add_items if old.get(dn, {}) != new.get(dn, {})
        },
    )
    entries = [{
        dn: [{
            "add": attrs
        }, {
            "delete_others": delete_others
        }]
    } for dn, attrs in add_items.items()]
    actual = salt.states.ldap.managed(name, entries)
    assert expected_ret == actual
    assert expected_db == db.db