Hello,

attaching refactored sudocmd_plugin.

Filip
From ad926d3a9bdf4fae2504c60e0facb26485f91941 Mon Sep 17 00:00:00 2001
From: Filip Skola <fsk...@redhat.com>
Date: Mon, 18 Jan 2016 13:56:44 +0100
Subject: [PATCH] Refactor test_sudocmd_plugin

---
 ipatests/test_xmlrpc/test_sudocmd_plugin.py | 561 +++++++++++++---------------
 1 file changed, 262 insertions(+), 299 deletions(-)

diff --git a/ipatests/test_xmlrpc/test_sudocmd_plugin.py b/ipatests/test_xmlrpc/test_sudocmd_plugin.py
index 2056118ba763be45e78ddf6643059e32d7680af8..bf056a606248d001889af3ee8d9dcec7118be502 100644
--- a/ipatests/test_xmlrpc/test_sudocmd_plugin.py
+++ b/ipatests/test_xmlrpc/test_sudocmd_plugin.py
@@ -21,309 +21,272 @@
 Test the `ipalib/plugins/sudocmd.py` module.
 """
 
-from ipalib import errors
-from ipatests.test_xmlrpc.xmlrpc_test import (Declarative, fuzzy_sudocmddn,
-    fuzzy_uuid)
+from ipalib import api, errors
+from ipatests.util import assert_deepequal
+from ipatests.test_xmlrpc.xmlrpc_test import (XMLRPC_test, fuzzy_sudocmddn,
+                                              fuzzy_uuid, raises_exact)
 from ipatests.test_xmlrpc import objectclasses
+from nose.tools import raises
 import pytest
 
-sudocmd1 = u'/usr/bin/sudotestcmd1'
-sudocmd1_camelcase = u'/usr/bin/sudoTestCmd1'
 
-sudorule1 = u'test_sudorule1'
+sudocmd_nonexistent = u'testing_sudocmd'
+sudocmd1_desc = u'Test sudo command 1'
+sudocmd2_desc = u'Test sudo command 2'
+
+
+def create_sudocmd(command, description):
+    """ Create sudocmd and check the result """
+    result = api.Command['sudocmd_add'](
+        command, description=description
+    )
+    assert_deepequal(dict(
+        value=command,
+        summary=u'Added Sudo Command "%s"' % command,
+        result=dict(
+            dn=fuzzy_sudocmddn,
+            sudocmd=[command],
+            description=[description],
+            objectclass=objectclasses.sudocmd,
+            ipauniqueid=[fuzzy_uuid])),
+        result)
+
+
+def delete_sudocmd(command):
+    """ Delete sudocmd and check the result """
+    result = api.Command['sudocmd_del'](command)
+    assert_deepequal(dict(
+        value=[command],
+        summary=u'Deleted Sudo Command "%s"' % command,
+        result=dict(failed=[])),
+        result)
+
+
+@pytest.fixture(scope='class')
+def sudocmd1(request):
+    command = u'/usr/bin/sudotestcmd1'
+    description = sudocmd1_desc
+    create_sudocmd(command, description)
+
+    def fin():
+        delete_sudocmd(command)
+    request.addfinalizer(fin)
+    return command
+
+
+@pytest.fixture(scope='class')
+def sudocmd2(request):
+    command = u'/usr/bin/sudoTestCmd1'
+    description = sudocmd2_desc
+    create_sudocmd(command, description)
+
+    def fin():
+        delete_sudocmd(command)
+    request.addfinalizer(fin)
+    return command
+
+
+@pytest.fixture(scope='class')
+def sudorule1(request):
+    name = u'test_sudorule1'
+
+    def fin():
+        api.Command['sudorule_del'](name)
+    request.addfinalizer(fin)
+    return name
+
+
+@pytest.mark.tier1
+class TestNonexistentSudoCmd(XMLRPC_test):
+    @raises(errors.NotFound)
+    def test_retrieve_nonexistent(self):
+        """ Try to retrieve non-existent sudocmd """
+        api.Command['sudocmd_show'](sudocmd_nonexistent)
+
+    @raises(errors.NotFound)
+    def test_update_nonexistent(self):
+        """ Try to update non-existent sudocmd """
+        api.Command['sudocmd_mod'](sudocmd_nonexistent, description=u'Nope')
+
+    @raises(errors.NotFound)
+    def test_delete_nonexistent(self):
+        """ Try to delete non-existent sudocmd """
+        api.Command['sudocmd_del'](sudocmd_nonexistent)
+
+
+@pytest.mark.tier1
+class TestSudoCmd(XMLRPC_test):
+    def test_create(self, sudocmd1, sudocmd2):
+        """ Create sudocmd and sudocmd with camelcase'd command """
+        # sudocmds get created by the fixtures
+
+    def test_create_duplicate(self, sudocmd1):
+        """ Try to create duplicate sudocmd """
+        with raises_exact(errors.DuplicateEntry(
+                message=u'sudo command with name "%s" already exists' % sudocmd1)):
+            create_sudocmd(sudocmd1, '')
+
+    def test_create_duplicate_camelcase(self, sudocmd2):
+        """ Try to create duplicate camelcase'd sudocmd """
+        with raises_exact(errors.DuplicateEntry(
+                message=u'sudo command with name "%s" already exists' % sudocmd2)):
+            create_sudocmd(sudocmd2, '')
+
+    def test_retrieve(self, sudocmd1):
+        """ Retrieve sudocmd """
+        result = api.Command['sudocmd_show'](sudocmd1)
+        assert_deepequal(dict(
+            value=sudocmd1,
+            summary=None,
+            result=dict(
+                dn=fuzzy_sudocmddn,
+                sudocmd=[sudocmd1],
+                description=[sudocmd1_desc])),
+            result)
+
+    def test_search(self, sudocmd1):
+        """ Search for sudocmd """
+        result = api.Command['sudocmd_find'](sudocmd1)
+        assert_deepequal(dict(
+            count=1,
+            truncated=False,
+            summary=u'1 Sudo Command matched',
+            result=[dict(
+                dn=fuzzy_sudocmddn,
+                sudocmd=[sudocmd1],
+                description=[sudocmd1_desc],
+            )]),
+            result)
+
+    def test_search_camelcase(self, sudocmd2):
+        """ Search for camelcase'd sudocmd """
+        result = api.Command['sudocmd_find'](sudocmd2)
+        assert_deepequal(dict(
+            count=1,
+            truncated=False,
+            summary=u'1 Sudo Command matched',
+            result=[dict(
+                dn=fuzzy_sudocmddn,
+                    sudocmd=[sudocmd2],
+                    description=[sudocmd2_desc])]),
+            result)
+
+    def test_update_and_verify(self, sudocmd1):
+        """ Update sudocmd, verify by retrieve, and rename it back """
+        sudocmd1_desc_new = u'Updated sudo command 1'
+
+        result = api.Command['sudocmd_mod'](
+            sudocmd1,
+            description=sudocmd1_desc_new
+        )
+        assert_deepequal(dict(
+            value=sudocmd1,
+            summary=u'Modified Sudo Command "%s"' % sudocmd1,
+            result=dict(
+                sudocmd=[sudocmd1],
+                description=[sudocmd1_desc_new],
+            )),
+            result)
+
+        result = api.Command['sudocmd_show'](sudocmd1)
+        assert_deepequal(dict(
+            value=sudocmd1,
+            summary=None,
+            result=dict(
+                dn=fuzzy_sudocmddn,
+                sudocmd=[sudocmd1],
+                description=[sudocmd1_desc_new])),
+            result)
+
+        result = api.Command['sudocmd_mod'](
+            sudocmd1,
+            description=sudocmd1_desc
+        )
+        assert_deepequal(dict(
+            value=sudocmd1,
+            summary=u'Modified Sudo Command "%s"' % sudocmd1,
+            result=dict(
+                sudocmd=[sudocmd1],
+                description=[sudocmd1_desc],
+            )),
+            result)
 
 
 @pytest.mark.tier1
-class test_sudocmd(Declarative):
-
-    cleanup_commands = [
-        ('sudocmd_del', [sudocmd1], {}),
-        ('sudocmd_del', [sudocmd1_camelcase], {}),
-        ('sudorule_del', [sudorule1], {}),
-    ]
-
-    tests = [
-
-        dict(
-            desc='Try to retrieve non-existent %r' % sudocmd1,
-            command=('sudocmd_show', [sudocmd1], {}),
-            expected=errors.NotFound(
-                reason=u'%s: sudo command not found' % sudocmd1),
-        ),
-
-
-        dict(
-            desc='Try to update non-existent %r' % sudocmd1,
-            command=('sudocmd_mod', [sudocmd1], dict(description=u'Nope')),
-            expected=errors.NotFound(
-                reason=u'%s: sudo command not found' % sudocmd1),
-        ),
-
-
-        dict(
-            desc='Try to delete non-existent %r' % sudocmd1,
-            command=('sudocmd_del', [sudocmd1], {}),
-            expected=errors.NotFound(
-                reason=u'%s: sudo command not found' % sudocmd1),
-        ),
-
-
-        dict(
-            desc='Create %r' % sudocmd1,
-            command=('sudocmd_add', [sudocmd1],
-                dict(
-                    description=u'Test sudo command 1',
-                ),
-            ),
-            expected=dict(
-                value=sudocmd1,
-                summary=u'Added Sudo Command "%s"' % sudocmd1,
-                result=dict(
-                    dn=fuzzy_sudocmddn,
-                    sudocmd=[sudocmd1],
-                    description=[u'Test sudo command 1'],
-                    objectclass=objectclasses.sudocmd,
-                    ipauniqueid=[fuzzy_uuid],
-                ),
-            ),
-        ),
-
-        dict(
-            desc='Create %r' % sudocmd1_camelcase,
-            command=('sudocmd_add', [sudocmd1_camelcase],
-                dict(
-                    description=u'Test sudo command 2',
-                ),
-            ),
-            expected=dict(
-                value=sudocmd1_camelcase,
-                summary=u'Added Sudo Command "%s"' % sudocmd1_camelcase,
-                result=dict(
-                    dn=fuzzy_sudocmddn,
-                    sudocmd=[sudocmd1_camelcase],
-                    description=[u'Test sudo command 2'],
-                    objectclass=objectclasses.sudocmd,
-                    ipauniqueid=[fuzzy_uuid],
-                ),
-            ),
-        ),
-
-
-        dict(
-            desc='Try to create duplicate %r' % sudocmd1,
-            command=('sudocmd_add', [sudocmd1],
-                dict(
-                    description=u'Test sudo command 1',
-                ),
-            ),
-            expected=errors.DuplicateEntry(message=u'sudo command with ' +
-                u'name "%s" already exists' % sudocmd1),
-        ),
-
-        dict(
-            desc='Try to create duplicate %r' % sudocmd1_camelcase,
-            command=('sudocmd_add', [sudocmd1_camelcase],
-                dict(
-                    description=u'Test sudo command 2',
-                ),
-            ),
-            expected=errors.DuplicateEntry(message=u'sudo command with ' +
-                u'name "%s" already exists' % sudocmd1_camelcase),
-        ),
-
-
-        dict(
-            desc='Retrieve %r' % sudocmd1,
-            command=('sudocmd_show', [sudocmd1], {}),
-            expected=dict(
-                value=sudocmd1,
-                summary=None,
-                result=dict(
-                    dn=fuzzy_sudocmddn,
-                    sudocmd=[sudocmd1],
-                    description=[u'Test sudo command 1'],
-                ),
-            ),
-        ),
-
-
-        dict(
-            desc='Search for %r' % sudocmd1,
-            command=('sudocmd_find', [sudocmd1], {}),
-            expected=dict(
-                count=1,
-                truncated=False,
-                summary=u'1 Sudo Command matched',
-                result=[
-                    dict(
-                        dn=fuzzy_sudocmddn,
-                        sudocmd=[sudocmd1],
-                        description=[u'Test sudo command 1'],
-                    ),
-                ],
-            ),
-        ),
-
-        dict(
-            desc='Search for %r' % sudocmd1_camelcase,
-            command=('sudocmd_find', [sudocmd1_camelcase], {}),
-            expected=dict(
-                count=1,
-                truncated=False,
-                summary=u'1 Sudo Command matched',
-                result=[
-                    dict(
-                        dn=fuzzy_sudocmddn,
-                        sudocmd=[sudocmd1_camelcase],
-                        description=[u'Test sudo command 2'],
-                    ),
-                ],
-            ),
-        ),
-
-
-        dict(
-            desc='Update %r' % sudocmd1,
-            command=('sudocmd_mod', [sudocmd1], dict(
-                description=u'Updated sudo command 1')),
-            expected=dict(
-                value=sudocmd1,
-                summary=u'Modified Sudo Command "%s"' % sudocmd1,
-                result=dict(
-                    sudocmd=[sudocmd1],
-                    description=[u'Updated sudo command 1'],
-                ),
-            ),
-        ),
-
-
-        dict(
-            desc='Retrieve %r to verify update' % sudocmd1,
-            command=('sudocmd_show', [sudocmd1], {}),
-            expected=dict(
-                value=sudocmd1,
-                summary=None,
-                result=dict(
-                    dn=fuzzy_sudocmddn,
-                    sudocmd=[sudocmd1],
-                    description=[u'Updated sudo command 1'],
-                ),
-            ),
-        ),
-
-        dict(
-            desc='Create %r' % sudorule1,
-            command=('sudorule_add', [sudorule1], {}),
-            expected=lambda e, result: True,
-        ),
-
-        dict(
-            desc='Add %r to %r allow list' % (sudocmd1, sudorule1),
-            command=('sudorule_add_allow_command', [sudorule1],
-                dict(sudocmd=sudocmd1)),
-            expected=dict(
-                    completed=1,
-                    failed=dict(
-                        memberallowcmd=dict(sudocmdgroup=(), sudocmd=())),
-                    result=lambda result: True,
-                ),
-        ),
-
-        dict(
-            desc="Test %r can't be deleted when in %r" % (sudocmd1, sudorule1),
-            command=('sudocmd_del', [sudocmd1], {}),
-            expected=errors.DependentEntry(key=sudocmd1, label='sudorule',
-                dependent=sudorule1),
-        ),
-
-        dict(
-            desc='Remove %r from %r' % (sudocmd1, sudorule1),
-            command=('sudorule_remove_allow_command', [sudorule1],
-                dict(sudocmd=sudocmd1)),
-            expected=dict(
-                    completed=1,
-                    failed=dict(
-                        memberallowcmd=dict(sudocmdgroup=(), sudocmd=())),
-                    result=lambda result: True,
-                ),
-        ),
-
-        dict(
-            desc='Add %r to %r deny list' % (sudocmd1, sudorule1),
-            command=('sudorule_add_deny_command', [sudorule1],
-                dict(sudocmd=sudocmd1)),
-            expected=dict(
-                    completed=1,
-                    failed=dict(
-                        memberdenycmd=dict(sudocmdgroup=(), sudocmd=())),
-                    result=lambda result: True,
-                ),
-        ),
-
-        dict(
-            desc="Test %r can't be deleted when in %r" % (sudocmd1, sudorule1),
-            command=('sudocmd_del', [sudocmd1], {}),
-            expected=errors.DependentEntry(key=sudocmd1, label='sudorule',
-                dependent=sudorule1),
-        ),
-
-        dict(
-            desc='Remove %r from %r' % (sudocmd1, sudorule1),
-            command=('sudorule_remove_deny_command', [sudorule1],
-                dict(sudocmd=sudocmd1)),
-            expected=dict(
-                    completed=1,
-                    failed=dict(
-                        memberdenycmd=dict(sudocmdgroup=(), sudocmd=())),
-                    result=lambda result: True,
-                ),
-        ),
-
-        dict(
-            desc='Delete %r' % sudocmd1,
-            command=('sudocmd_del', [sudocmd1], {}),
-            expected=dict(
-                value=[sudocmd1],
-                summary=u'Deleted Sudo Command "%s"' % sudocmd1,
-                result=dict(failed=[]),
-            ),
-        ),
-
-
-        dict(
-            desc='Try to retrieve non-existent %r' % sudocmd1,
-            command=('sudocmd_show', [sudocmd1], {}),
-            expected=errors.NotFound(
-                reason=u'%s: sudo command not found' % sudocmd1),
-        ),
-
-
-        dict(
-            desc='Try to update non-existent %r' % sudocmd1,
-            command=('sudocmd_mod', [sudocmd1], dict(description=u'Nope')),
-            expected=errors.NotFound(
-                reason=u'%s: sudo command not found' % sudocmd1),
-        ),
-
-
-        dict(
-            desc='Try to delete non-existent %r' % sudocmd1,
-            command=('sudocmd_del', [sudocmd1], {}),
-            expected=errors.NotFound(
-                reason=u'%s: sudo command not found' % sudocmd1),
-        ),
-
-        dict(
-            desc='Retrieve %r' % sudocmd1_camelcase,
-            command=('sudocmd_show', [sudocmd1_camelcase], {}),
-            expected=dict(
-                value=sudocmd1_camelcase,
-                summary=None,
-                result=dict(
-                    dn=fuzzy_sudocmddn,
-                    sudocmd=[sudocmd1_camelcase],
-                    description=[u'Test sudo command 2'],
-                ),
-            ),
-        ),
-    ]
+class TestSudoCmdInSudoRuleLists(XMLRPC_test):
+    def test_add_sudocmd_to_sudorule_allow_list(self, sudocmd1, sudorule1):
+        """ Add sudocmd to sudorule allow list """
+        api.Command['sudorule_add'](sudorule1)
+        result = api.Command['sudorule_add_allow_command'](
+            sudorule1, sudocmd=sudocmd1
+        )
+        assert_deepequal(dict(
+            completed=1,
+            failed=dict(
+                memberallowcmd=dict(sudocmdgroup=(), sudocmd=())),
+            result=lambda result: True,
+        ), result)
+
+    def test_delete_dependent_sudocmd_sudorule_allow(self, sudocmd1, sudorule1):
+        """ Try to delete sudocmd that is in sudorule allow list """
+        with raises_exact(errors.DependentEntry(
+                key=sudocmd1,
+                label='sudorule',
+                dependent=sudorule1)):
+            api.Command['sudocmd_del'](sudocmd1)
+
+    def test_remove_sudocmd_from_sudorule_allow(self, sudocmd1, sudorule1):
+        """ Remove sudocmd from sudorule allow list """
+        result = api.Command['sudorule_remove_allow_command'](
+            sudorule1, sudocmd=sudocmd1
+        )
+        assert_deepequal(dict(
+            completed=1,
+            failed=dict(
+                memberallowcmd=dict(sudocmdgroup=(), sudocmd=())),
+            result=lambda result: True),
+            result)
+
+    def test_add_sudocmd_to_sudorule_deny_list(self, sudocmd1, sudorule1):
+        """ Add sudocmd to sudorule deny list """
+        result = api.Command['sudorule_add_deny_command'](
+            sudorule1, sudocmd=sudocmd1
+        )
+        assert_deepequal(dict(
+            completed=1,
+            failed=dict(
+                memberdenycmd=dict(sudocmdgroup=(), sudocmd=())),
+            result=lambda result: True),
+            result)
+
+    def test_delete_dependent_sudocmd_sudorule_deny(self, sudocmd1, sudorule1):
+        """ Try to delete sudocmd that is in sudorule deny list """
+        with raises_exact(errors.DependentEntry(
+                key=sudocmd1,
+                label='sudorule',
+                dependent=sudorule1)):
+            api.Command['sudocmd_del'](sudocmd1)
+
+    def test_remove_sudocmd_from_sudorule_deny(self, sudocmd1, sudorule1):
+        """ Remove sudocmd from sudorule deny list """
+        result = api.Command['sudorule_remove_deny_command'](
+            sudorule1, sudocmd=sudocmd1
+        )
+        assert_deepequal(dict(
+            completed=1,
+            failed=dict(
+                memberdenycmd=dict(sudocmdgroup=(), sudocmd=())),
+            result=lambda result: True),
+            result)
+
+    def test_retrieve_camelcase(self, sudocmd2):
+        """ Retrieve camelcase'd sudocmd """
+        result = api.Command['sudocmd_show'](sudocmd2)
+        assert_deepequal(dict(
+            value=sudocmd2,
+            summary=None,
+            result=dict(
+                dn=fuzzy_sudocmddn,
+                sudocmd=[sudocmd2],
+                description=[sudocmd2_desc])),
+            result)
-- 
2.5.0

-- 
Manage your subscription for the Freeipa-devel mailing list:
https://www.redhat.com/mailman/listinfo/freeipa-devel
Contribute to FreeIPA: http://www.freeipa.org/page/Contribute/Code

Reply via email to