def test_logical_connector_list(mock_type_value_rewrite): assert C7N_Rewriter.logical_connector(sentinel.resource, [{ "type": "value" }]) == str(sentinel.rewritten) assert mock_type_value_rewrite.mock_calls == [ call(sentinel.resource, {'type': 'value'}) ]
def test_logical_connector_not_1(mock_type_value_rewrite): not_1 = {"not": [{"type": "value"}]} assert (C7N_Rewriter.logical_connector( sentinel.resource, not_1) == f"! ({str(sentinel.rewritten)})") assert mock_type_value_rewrite.mock_calls == [ call(sentinel.resource, {'type': 'value'}) ]
def test_logical_connector_or(mock_type_value_rewrite): # Note the singleton or; this is common. assert C7N_Rewriter.logical_connector(sentinel.resource, {"or": [{ "type": "value" }]}) == str(sentinel.rewritten) assert mock_type_value_rewrite.mock_calls == [ call(sentinel.resource, {'type': 'value'}) ]
def test_logical_connector_not_2(mock_type_value_rewrite): not_2 = {"not": [{"type": "value", "value": 1}, {"type": "value", "value": 2}]} expected_2 = f"! ({str(sentinel.rewritten)} && {str(sentinel.rewritten)})" assert ( C7N_Rewriter.logical_connector(sentinel.resource, not_2) == expected_2 ) assert mock_type_value_rewrite.mock_calls == [ call(sentinel.resource, {'type': 'value', 'value': 1}), call(sentinel.resource, {'type': 'value', 'value': 2}) ]
def test_logical_connector_errors(mock_type_value_rewrite): with raises(ValueError): C7N_Rewriter.logical_connector(sentinel.resource, {"type": "-not-defined-"}) with raises(ValueError): C7N_Rewriter.logical_connector(sentinel.resource, "nope")
def __init__(self) -> None: self.policy = yaml.load(self.policy_doc, Loader=yaml.SafeLoader) self.filter_expr = C7N_Rewriter.logical_connector(self.policy["filters"])