示例#1
0
def test_not_to_be_changed_not_configured():
    """
    Test sysctl.present for a sysctl that isn't in the config file but
    already has the correct value
    """
    name = "some.unknown.oid"
    value = "1"
    comment = (
        "Sysctl value is currently set on the running system but "
        "not in a config file. Sysctl option {} set to be "
        "changed to 1 in config file.".format(name)
    )

    ret = {"name": name, "result": None, "changes": {}, "comment": comment}

    def mock_current(config_file=None):
        if config_file is None:
            return {name: value}
        return {}

    with patch.dict(sysctl.__opts__, {"test": True}):
        with patch.dict(sysctl.__salt__, {"sysctl.show": mock_current}):
            mock_get = MagicMock(return_value=value)
            with patch.dict(sysctl.__salt__, {"sysctl.get": mock_get}):
                assert sysctl.present(name, value) == ret
示例#2
0
def test_configured_but_unknown():
    """
    Test sysctl.present for a sysctl that is already configured but is
    not known by the system.  For example, a sysctl used by a kernel module
    that isn't loaded.
    """
    name = "vfs.usermount"
    value = "1"
    comment = (
        "Sysctl value {0} is present in configuration file but is not "
        "present in the running config. The value {0} is set to be "
        "changed to {1}".format(name, value)
    )
    ret = {"name": name, "result": None, "changes": {}, "comment": comment}

    def mock_config(config_file=None):
        if config_file is None:
            return {}
        return {name: value}

    with patch.dict(sysctl.__opts__, {"test": True}):
        with patch.dict(sysctl.__salt__, {"sysctl.show": mock_config}):
            mock_get = MagicMock(return_value="")
            with patch.dict(sysctl.__salt__, {"sysctl.get": mock_get}):
                assert sysctl.present(name, value) == ret
示例#3
0
 def test_already_set(self):
     """
     Test sysctl.present when the value is already set
     """
     name = "vfs.usermount"
     value = "1"
     comment = "Sysctl value {} = {} is already set".format(name, value)
     ret = {"name": name, "result": True, "changes": {}, "comment": comment}
     with patch.dict(sysctl.__opts__, {"test": False}):
         mock = MagicMock(return_value="Already set")
         with patch.dict(sysctl.__salt__, {"sysctl.persist": mock}):
             self.assertDictEqual(sysctl.present(name, value), ret)
示例#4
0
def test_failed_to_set():
    """
    Test sysctl.present when the sysctl command fails to change a value
    """
    name = "net.isr.maxthreads"
    value = "8"
    comment = "Failed to set {} to {}: ".format(name, value)
    ret = {"name": name, "result": False, "changes": {}, "comment": comment}

    with patch.dict(sysctl.__opts__, {"test": False}):
        mock = MagicMock(side_effect=CommandExecutionError)
        with patch.dict(sysctl.__salt__, {"sysctl.persist": mock}):
            assert sysctl.present(name, value) == ret
示例#5
0
def test_updated():
    """
    Test sysctl.present when the value is not already set
    """
    name = "vfs.usermount"
    value = "1"
    comment = "Updated sysctl value {} = {}".format(name, value)
    changes = {name: value}
    ret = {"name": name, "result": True, "changes": changes, "comment": comment}
    with patch.dict(sysctl.__opts__, {"test": False}):
        mock = MagicMock(return_value="Updated")
        with patch.dict(sysctl.__salt__, {"sysctl.persist": mock}):
            assert sysctl.present(name, value) == ret
示例#6
0
    def test_inaccessible_config_file(self):
        """
        Test sysctl.present with a config file that cannot be opened
        """
        name = "some.unknown.oid"
        value = "1"
        config = "/etc/sysctl.conf"
        comment = ("Sysctl option {} might be changed, we failed to check "
                   "config file at {}. The file is either unreadable, or "
                   "missing.".format(name, config))
        ret = {"name": name, "result": None, "changes": {}, "comment": comment}

        with patch.dict(sysctl.__opts__, {"test": True}):
            mock = MagicMock(return_value=None)
            with patch.dict(sysctl.__salt__, {"sysctl.show": mock}):
                self.assertDictEqual(sysctl.present(name, value), ret)
示例#7
0
def test_empty_config_file_and_value_not_found():
    """
    Test sysctl.present for an unknown sysctl, not present in config file
    """
    name = "some.unknown.oid"
    value = "1"
    comment = "Sysctl option {} would be changed to {}".format(name, value)

    ret = {"name": name, "result": None, "changes": {}, "comment": comment}

    with patch.dict(sysctl.__opts__, {"test": True}):
        mock_show = MagicMock(return_value={})
        with patch.dict(sysctl.__salt__, {"sysctl.show": mock_show}):
            mock_get = MagicMock(return_value="")
            with patch.dict(sysctl.__salt__, {"sysctl.get": mock_get}):
                assert sysctl.present(name, value) == ret
示例#8
0
    def test_no_change(self):
        """
        Test sysctl.present for an already-configured value
        """
        name = "vfs.usermount"
        value = "1"
        comment = "Sysctl value {} = {} is already set".format(name, value)
        ret = {"name": name, "result": True, "changes": {}, "comment": comment}

        def mock_config(config_file=None):
            if config_file is None:
                return {}
            return {name: value}

        with patch.dict(sysctl.__opts__, {"test": True}):
            with patch.dict(sysctl.__salt__, {"sysctl.show": mock_config}):
                mock_get = MagicMock(return_value=value)
                with patch.dict(sysctl.__salt__, {"sysctl.get": mock_get}):
                    self.assertDictEqual(sysctl.present(name, value), ret)
示例#9
0
    def test_change(self):
        """
        Test sysctl.present for a value whose configuration must change
        """
        name = "vfs.usermount"
        old_value = "2"
        value = "1"
        comment = "Sysctl option {} would be changed to {}".format(name, value)
        ret = {"name": name, "result": None, "changes": {}, "comment": comment}

        def mock_config(config_file=None):
            if config_file is None:
                return {name: old_value}
            return {name: old_value}

        with patch.dict(sysctl.__opts__, {"test": True}):
            with patch.dict(sysctl.__salt__, {"sysctl.show": mock_config}):
                mock_get = MagicMock(return_value=old_value)
                with patch.dict(sysctl.__salt__, {"sysctl.get": mock_get}):
                    self.assertDictEqual(sysctl.present(name, value), ret)
示例#10
0
def test_to_be_changed_not_configured():
    """
    Test sysctl.present for a sysctl that isn't in the config file and must
    be changed.
    """
    name = "vfs.usermount"
    value = "1"
    comment = "Sysctl option {} set to be changed to {}".format(name, value)
    ret = {"name": name, "result": None, "changes": {}, "comment": comment}

    def mock_current(config_file=None):
        """
        Mock return value for __salt__.
        """
        if config_file is None:
            return {name: "0"}
        return {}

    with patch.dict(sysctl.__opts__, {"test": True}):
        with patch.dict(sysctl.__salt__, {"sysctl.show": mock_current}):
            mock_get = MagicMock(return_value="0")
            with patch.dict(sysctl.__salt__, {"sysctl.get": mock_get}):
                assert sysctl.present(name, value) == ret
示例#11
0
    def test_present(self):
        '''
        Test to ensure that the named sysctl value is set
        in memory and persisted to the named configuration file.
        '''
        name = 'net.ipv4.conf.all.rp_filter'
        value = '1'
        config = '/etc/sysctl.conf'

        comment = ('Sysctl option {0} might be changed, we failed to check '
                   'config file at {1}. The file is either unreadable, or '
                   'missing.'.format(name, config))

        ret = {'name': name, 'result': None, 'changes': {}, 'comment': comment}

        comment1 = ('Sysctl option {0} set to be changed to {1}'.format(
            name, value))

        comment2 = ('Sysctl value is currently set on the running system but '
                    'not in a config file. Sysctl option {0} set to be '
                    'changed to 2 in config file.'.format(name))

        comt3 = (
            'Sysctl value {0} is present in configuration file but is not '
            'present in the running config. The value {0} is set to be '
            'changed to {1}'.format(name, value))

        comt4 = ('Sysctl value {0} = {1} is already set'.format(name, value))

        comt5 = ('Sysctl option {0} would be changed to {1}'.format(
            name, value))

        comt6 = ('Failed to set {0} to {1}: '.format(name, value))

        comt7 = ('Sysctl value {0} = {1} is already set'.format(name, value))

        def mock_current(config_file=None):
            '''
            Mock return value for __salt__.
            '''
            if config_file is None:
                return {name: '2'}
            return ['']

        def mock_config(config_file=None):
            '''
            Mock return value for __salt__.
            '''
            if config_file is None:
                return {'salt': '2'}
            return [name]

        def mock_both(config_file=None):
            '''
            Mock return value for __salt__.
            '''
            if config_file is None:
                return {name: value}
            return [name]

        with patch.dict(sysctl.__opts__, {'test': True}):
            mock = MagicMock(return_value=False)
            with patch.dict(sysctl.__salt__, {'sysctl.show': mock}):
                self.assertDictEqual(sysctl.present(name, value), ret)

            with patch.dict(sysctl.__salt__, {'sysctl.show': mock_current}):
                ret.update({'comment': comment1})
                self.assertDictEqual(sysctl.present(name, value), ret)

                ret.update({'comment': comment2})
                self.assertDictEqual(sysctl.present(name, '2'), ret)

            with patch.dict(sysctl.__salt__, {'sysctl.show': mock_config}):
                ret.update({'comment': comt3})
                self.assertDictEqual(sysctl.present(name, value), ret)

            mock = MagicMock(return_value=value)
            with patch.dict(sysctl.__salt__, {
                    'sysctl.show': mock_both,
                    'sysctl.get': mock
            }):
                ret.update({'comment': comt4, 'result': True})
                self.assertDictEqual(sysctl.present(name, value), ret)

            mock = MagicMock(return_value=[True])
            with patch.dict(sysctl.__salt__, {'sysctl.show': mock}):
                ret.update({'comment': comt5, 'result': None})
                self.assertDictEqual(sysctl.present(name, value), ret)

        with patch.dict(sysctl.__opts__, {'test': False}):
            mock = MagicMock(side_effect=CommandExecutionError)
            with patch.dict(sysctl.__salt__, {'sysctl.persist': mock}):
                ret.update({'comment': comt6, 'result': False})
                self.assertDictEqual(sysctl.present(name, value), ret)

            mock = MagicMock(return_value='Already set')
            with patch.dict(sysctl.__salt__, {'sysctl.persist': mock}):
                ret.update({'comment': comt7, 'result': True})
                self.assertDictEqual(sysctl.present(name, value), ret)
示例#12
0
    def test_present(self):
        """
        Test to ensure that the named sysctl value is set
        in memory and persisted to the named configuration file.
        """
        name = "net.ipv4.conf.all.rp_filter"
        value = "1"
        config = "/etc/sysctl.conf"

        comment = ("Sysctl option {0} might be changed, we failed to check "
                   "config file at {1}. The file is either unreadable, or "
                   "missing.".format(name, config))

        ret = {"name": name, "result": None, "changes": {}, "comment": comment}

        comment_empty = "Sysctl option {0} would be changed to {1}" "".format(
            name, value)

        comment1 = "Sysctl option {0} set to be changed to {1}".format(
            name, value)

        comment2 = ("Sysctl value is currently set on the running system but "
                    "not in a config file. Sysctl option {0} set to be "
                    "changed to 2 in config file.".format(name))

        comt3 = (
            "Sysctl value {0} is present in configuration file but is not "
            "present in the running config. The value {0} is set to be "
            "changed to {1}".format(name, value))

        comt4 = "Sysctl value {0} = {1} is already set".format(name, value)

        comt5 = "Sysctl option {0} would be changed to {1}".format(name, value)

        comt6 = "Failed to set {0} to {1}: ".format(name, value)

        comt7 = "Sysctl value {0} = {1} is already set".format(name, value)

        comt8 = "Sysctl value {0} = {1} was ignored".format(name, value)

        def mock_current(config_file=None):
            """
            Mock return value for __salt__.
            """
            if config_file is None:
                return {name: "2"}
            return [""]

        def mock_config(config_file=None):
            """
            Mock return value for __salt__.
            """
            if config_file is None:
                return {"salt": "2"}
            return [name]

        def mock_both(config_file=None):
            """
            Mock return value for __salt__.
            """
            if config_file is None:
                return {name: value}
            return [name]

        with patch.dict(sysctl.__opts__, {"test": True}):
            mock = MagicMock(return_value=None)
            with patch.dict(sysctl.__salt__, {"sysctl.show": mock}):
                self.assertDictEqual(sysctl.present(name, value), ret)

            mock = MagicMock(return_value=[])
            with patch.dict(sysctl.__salt__, {"sysctl.show": mock}):
                ret.update({"comment": comment_empty})
                self.assertDictEqual(sysctl.present(name, value), ret)

            with patch.dict(sysctl.__salt__, {"sysctl.show": mock_current}):
                ret.update({"comment": comment1})
                self.assertDictEqual(sysctl.present(name, value), ret)

                ret.update({"comment": comment2})
                self.assertDictEqual(sysctl.present(name, "2"), ret)

            with patch.dict(sysctl.__salt__, {"sysctl.show": mock_config}):
                ret.update({"comment": comt3})
                self.assertDictEqual(sysctl.present(name, value), ret)

            mock = MagicMock(return_value=value)
            with patch.dict(sysctl.__salt__, {
                    "sysctl.show": mock_both,
                    "sysctl.get": mock
            }):
                ret.update({"comment": comt4, "result": True})
                self.assertDictEqual(sysctl.present(name, value), ret)

            mock = MagicMock(return_value=[True])
            with patch.dict(sysctl.__salt__, {"sysctl.show": mock}):
                ret.update({"comment": comt5, "result": None})
                self.assertDictEqual(sysctl.present(name, value), ret)

        with patch.dict(sysctl.__opts__, {"test": False}):
            mock = MagicMock(side_effect=CommandExecutionError)
            with patch.dict(sysctl.__salt__, {"sysctl.persist": mock}):
                ret.update({"comment": comt6, "result": False})
                self.assertDictEqual(sysctl.present(name, value), ret)

            mock = MagicMock(return_value="Already set")
            with patch.dict(sysctl.__salt__, {"sysctl.persist": mock}):
                ret.update({"comment": comt7, "result": True})
                self.assertDictEqual(sysctl.present(name, value), ret)

            mock = MagicMock(return_value="Ignored")
            with patch.dict(sysctl.__salt__, {"sysctl.persist": mock}):
                ret.update({"comment": comt8, "result": True})
                self.assertDictEqual(sysctl.present(name, value), ret)
示例#13
0
    def test_present(self):
        '''
        Test to ensure that the named sysctl value is set
        in memory and persisted to the named configuration file.
        '''
        name = 'net.ipv4.conf.all.rp_filter'
        value = '1'
        config = '/etc/sysctl.conf'

        comment = ('Sysctl option {0} might be changed, we failed to check '
                   'config file at {1}. The file is either unreadable, or '
                   'missing.'.format(name, config))

        ret = {'name': name, 'result': None, 'changes': {}, 'comment': comment}

        comment1 = ('Sysctl option {0} set to be changed to {1}'
                    .format(name, value))

        comment2 = ('Sysctl value is currently set on the running system but '
                    'not in a config file. Sysctl option {0} set to be '
                    'changed to 2 in config file.'.format(name))

        comt3 = ('Sysctl value {0} is present in configuration file but is not '
                 'present in the running config. The value {0} is set to be '
                 'changed to {1}'.format(name, value))

        comt4 = ('Sysctl value {0} = {1} is already set'.format(name, value))

        comt5 = ('Sysctl option {0} would be changed to {1}'
                 .format(name, value))

        comt6 = ('Failed to set {0} to {1}: '.format(name, value))

        comt7 = ('Sysctl value {0} = {1} is already set'.format(name, value))

        def mock_current(config_file=None):
            '''
            Mock return value for __salt__.
            '''
            if config_file is None:
                return {name: '2'}
            return ['']

        def mock_config(config_file=None):
            '''
            Mock return value for __salt__.
            '''
            if config_file is None:
                return {'salt': '2'}
            return [name]

        def mock_both(config_file=None):
            '''
            Mock return value for __salt__.
            '''
            if config_file is None:
                return {name: value}
            return [name]

        with patch.dict(sysctl.__opts__, {'test': True}):
            mock = MagicMock(return_value=False)
            with patch.dict(sysctl.__salt__, {'sysctl.show': mock}):
                self.assertDictEqual(sysctl.present(name, value), ret)

            with patch.dict(sysctl.__salt__, {'sysctl.show': mock_current}):
                ret.update({'comment': comment1})
                self.assertDictEqual(sysctl.present(name, value), ret)

                ret.update({'comment': comment2})
                self.assertDictEqual(sysctl.present(name, '2'), ret)

            with patch.dict(sysctl.__salt__, {'sysctl.show': mock_config}):
                ret.update({'comment': comt3})
                self.assertDictEqual(sysctl.present(name, value), ret)

            mock = MagicMock(return_value=value)
            with patch.dict(sysctl.__salt__, {'sysctl.show': mock_both,
                                              'sysctl.get': mock}):
                ret.update({'comment': comt4, 'result': True})
                self.assertDictEqual(sysctl.present(name, value), ret)

            mock = MagicMock(return_value=[True])
            with patch.dict(sysctl.__salt__, {'sysctl.show': mock}):
                ret.update({'comment': comt5, 'result': None})
                self.assertDictEqual(sysctl.present(name, value), ret)

        with patch.dict(sysctl.__opts__, {'test': False}):
            mock = MagicMock(side_effect=CommandExecutionError)
            with patch.dict(sysctl.__salt__, {'sysctl.persist': mock}):
                ret.update({'comment': comt6, 'result': False})
                self.assertDictEqual(sysctl.present(name, value), ret)

            mock = MagicMock(return_value='Already set')
            with patch.dict(sysctl.__salt__, {'sysctl.persist': mock}):
                ret.update({'comment': comt7, 'result': True})
                self.assertDictEqual(sysctl.present(name, value), ret)