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)
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'")
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)