Exemplo n.º 1
0
    def test_cached(self, mock_getLogger):
        rule = mock.Mock()
        ctxt = mock.Mock(**{
            'push_rule': mock.MagicMock(),
            'rule_cache': {'name': 'cached'},
            'policy': {'name': rule},
            'stack': [],
        })
        ctxt.name = 'parent'

        policy.rule(ctxt, 'name')

        self.assertFalse(rule.instructions.called)
        self.assertFalse(ctxt.push_rule.called)
        self.assertEqual(ctxt.rule_cache, {'name': 'cached'})
        self.assertEqual(ctxt.stack, ['cached'])
        self.assertFalse(mock_getLogger.called)
Exemplo n.º 2
0
    def test_missing_rule(self, mock_getLogger):
        ctxt = mock.Mock(**{
            'push_rule': mock.MagicMock(),
            'rule_cache': {},
            'policy': {},
            'stack': [],
        })
        ctxt.name = 'parent'

        policy.rule(ctxt, 'name')

        self.assertFalse(ctxt.push_rule.called)
        self.assertEqual(ctxt.rule_cache, {'name': False})
        self.assertEqual(ctxt.stack, [False])
        mock_getLogger.assert_called_once_with('policies')
        mock_getLogger.return_value.warn.assert_called_once_with(
            "Request to evaluate non-existant rule 'name' while evaluating "
            "rule 'parent'")
Exemplo n.º 3
0
    def test_success(self, mock_getLogger):
        rule = mock.Mock(**{
            'instructions.side_effect': lambda c, s: c.stack.append('spam'),
        })
        ctxt = mock.Mock(**{
            'push_rule': mock.MagicMock(),
            'rule_cache': {},
            'policy': {'name': rule},
            'stack': [],
        })
        ctxt.name = 'parent'

        policy.rule(ctxt, 'name')

        rule.instructions.assert_called_once_with(ctxt, True)
        ctxt.push_rule.assert_called_once_with('name')
        ctxt.push_rule.return_value.assert_has_calls([
            mock.call.__enter__(),
            mock.call.__exit__(None, None, None),
        ])
        self.assertEqual(ctxt.rule_cache, {'name': 'spam'})
        self.assertEqual(ctxt.stack, ['spam'])
        self.assertFalse(mock_getLogger.called)