class TestSetAttributeAction(test_base.NodeTest):
    act = rules_plugins.SetAttributeAction()
    params = {'path': '/extra/value', 'value': 42}

    def test_validate(self):
        self.act.validate(self.params)
        self.assertRaises(ValueError, self.act.validate, {'value': 42})
        self.assertRaises(ValueError, self.act.validate,
                          {'path': '/extra/value'})

    @mock.patch.object(node_cache.NodeInfo, 'patch')
    def test_apply(self, mock_patch):
        self.act.apply(self.node_info, self.params)
        mock_patch.assert_called_once_with([{
            'op': 'add',
            'path': '/extra/value',
            'value': 42
        }])

    @mock.patch.object(node_cache.NodeInfo, 'patch')
    def test_rollback_with_existing(self, mock_patch):
        self.node.extra = {'value': 'value'}
        self.act.rollback(self.node_info, self.params)
        mock_patch.assert_called_once_with([{
            'op': 'remove',
            'path': '/extra/value'
        }])

    @mock.patch.object(node_cache.NodeInfo, 'patch')
    def test_rollback_no_existing(self, mock_patch):
        self.node.extra = {}
        self.act.rollback(self.node_info, self.params)
        self.assertFalse(mock_patch.called)
Example #2
0
class TestSetAttributeAction(test_base.NodeTest):
    act = rules_plugins.SetAttributeAction()
    params = {'path': '/extra/value', 'value': 42}

    def test_validate(self):
        self.act.validate(self.params)
        self.assertRaises(ValueError, self.act.validate, {'value': 42})
        self.assertRaises(ValueError, self.act.validate,
                          {'path': '/extra/value'})
        self.params['value'] = None
        self.act.validate(self.params)

    @mock.patch.object(node_cache.NodeInfo, 'patch')
    def test_apply(self, mock_patch):
        self.act.apply(self.node_info, self.params)
        mock_patch.assert_called_once_with([{
            'op': 'add',
            'path': '/extra/value',
            'value': 42
        }])
Example #3
0
class TestSetAttributeAction(test_base.NodeTest):
    act = rules_plugins.SetAttributeAction()
    params = {'path': '/extra/value', 'value': 42}

    def test_validate(self):
        self.act.validate(self.params)
        self.assertRaises(ValueError, self.act.validate, {'value': 42})
        self.assertRaises(ValueError, self.act.validate,
                          {'path': '/extra/value'})
        self.params['value'] = None
        self.act.validate(self.params)

    @mock.patch.object(node_cache.NodeInfo, 'patch', autospec=True)
    def test_apply(self, mock_patch):
        self.act.apply(self.node_info, self.params)
        mock_patch.assert_called_once_with(self.node_info, [{
            'op': 'add',
            'path': '/extra/value',
            'value': 42
        }])

    @mock.patch.object(node_cache.NodeInfo, 'patch', autospec=True)
    def test_apply_driver(self, mock_patch):
        params = {'path': '/driver', 'value': 'ipmi'}
        self.act.apply(self.node_info, params)
        mock_patch.assert_called_once_with(self.node_info, [{
            'op': 'add',
            'path': '/driver',
            'value': 'ipmi'
        }],
                                           reset_interfaces=True)

    @mock.patch.object(node_cache.NodeInfo, 'patch', autospec=True)
    def test_apply_driver_no_reset_interfaces(self, mock_patch):
        params = {
            'path': '/driver',
            'value': 'ipmi',
            'reset_interfaces': False
        }
        self.act.apply(self.node_info, params)
        mock_patch.assert_called_once_with(self.node_info, [{
            'op': 'add',
            'path': '/driver',
            'value': 'ipmi'
        }])

    @mock.patch.object(node_cache.NodeInfo, 'patch', autospec=True)
    def test_apply_driver_not_supported(self, mock_patch):
        for exc in (TypeError, os_exc.SDKException):
            mock_patch.reset_mock()
            mock_patch.side_effect = [exc, None]
            params = {'path': '/driver', 'value': 'ipmi'}
            self.act.apply(self.node_info, params)
            mock_patch.assert_has_calls([
                mock.call(self.node_info, [{
                    'op': 'add',
                    'path': '/driver',
                    'value': 'ipmi'
                }],
                          reset_interfaces=True),
                mock.call(self.node_info, [{
                    'op': 'add',
                    'path': '/driver',
                    'value': 'ipmi'
                }])
            ])