Skip to content

Commit

Permalink
Add dynamic policies test
Browse files Browse the repository at this point in the history
  • Loading branch information
gerardparis committed Oct 3, 2016
1 parent 2dffd50 commit 319f410
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 6 deletions.
3 changes: 0 additions & 3 deletions api/registry/dynamic_policies/rules/rule.py
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,6 @@ def _do_action(self):
# TODO Review if this tenant has already deployed this filter. Not deploy the same filter more than one time.

url = dynamic_filter["activation_url"]+"/"+self.target+"/deploy/"+str(dynamic_filter["identifier"])
print url

data = dict()

Expand All @@ -219,8 +218,6 @@ def _do_action(self):

response = requests.put(url, json.dumps(data), headers=headers)

print response.status_code

if 200 <= response.status_code < 300:
print 'Policy ' + self.id + ' applied'
self.redis.hset(self.id, 'alive', False)
Expand Down
52 changes: 50 additions & 2 deletions api/registry/tests_dynamic_policies.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,16 @@
from .dsl_parser import parse
from registry.dynamic_policies.rules.rule import Rule

from httmock import urlmatch, HTTMock

@urlmatch(netloc=r'(.*\.)?example\.com')
def example_mock_200(url, request):
return {'status_code': 200, 'content': 'OK'}

@urlmatch(netloc=r'(.*\.)?example\.com')
def example_mock_400(url, request):
return {'status_code': 400, 'content': 'Error'}


# Tests use database=10 instead of 0.
@override_settings(REDIS_CON_POOL=redis.ConnectionPool(host='localhost', port=6379, db=10),
Expand Down Expand Up @@ -49,12 +59,50 @@ def test_action_is_triggered(self, mock_do_action):
rule.update('metric1', 6)
self.assertTrue(mock_do_action.called)

@mock.patch('registry.dynamic_policies.rules.rule.redis.StrictRedis.hgetall')
@mock.patch('registry.dynamic_policies.rules.rule.redis.StrictRedis.hset')
def test_action_set_is_triggered_deploy_200(self, mock_redis_hset, mock_redis_hgetall):
mock_redis_hgetall.return_value = {'activation_url': 'http://example.com/filters',
'identifier': '1',
'valid_parameters': '{"cparam1": "integer", "cparam2": "integer", "cparam3": "integer"}'}
self.setup_dsl_parser_data()
has_condition_list, parsed_rule = parse('FOR TENANT:4f0279da74ef4584a29dc72c835fe2c9 WHEN metric1 > 5 DO SET compression')
target = '4f0279da74ef4584a29dc72c835fe2c9'
host = None
rule = Rule(parsed_rule, parsed_rule.action_list[0], target, host)
rule.id = "10"
with HTTMock(example_mock_200):
rule.update('metric1', 6)
self.assertTrue(mock_redis_hset.called)

@mock.patch('registry.dynamic_policies.rules.rule.redis.StrictRedis.hgetall')
@mock.patch('registry.dynamic_policies.rules.rule.redis.StrictRedis.hset')
def test_action_set_is_triggered_deploy_400(self, mock_redis_hset, mock_redis_hgetall):
mock_redis_hgetall.return_value = {'activation_url': 'http://example.com/filters',
'identifier': '1',
'valid_parameters': '{"cparam1": "integer", "cparam2": "integer", "cparam3": "integer"}'}
self.setup_dsl_parser_data()
has_condition_list, parsed_rule = parse('FOR TENANT:4f0279da74ef4584a29dc72c835fe2c9 WHEN metric1 > 5 DO SET compression')
target = '4f0279da74ef4584a29dc72c835fe2c9'
host = None
rule = Rule(parsed_rule, parsed_rule.action_list[0], target, host)
rule.id = "10"
with HTTMock(example_mock_400):
rule.update('metric1', 6)
self.assertFalse(mock_redis_hset.called)



#
# Aux methods
#

def setup_dsl_parser_data(self):
self.r.hmset('dsl_filter:compression', {'valid_parameters': '{"cparam1": "integer", "cparam2": "integer", "cparam3": "integer"}'})
self.r.hmset('dsl_filter:encryption', {'valid_parameters': '{"eparam1": "integer", "eparam2": "bool", "eparam3": "string"}'})
self.r.hmset('dsl_filter:compression', {'activation_url': 'http://example.com/filters',
'identifier': '1',
'valid_parameters': '{"cparam1": "integer", "cparam2": "integer", "cparam3": "integer"}'})
self.r.hmset('dsl_filter:encryption', {'activation_url': 'http://example.com/filters',
'identifier': '2',
'valid_parameters': '{"eparam1": "integer", "eparam2": "bool", "eparam3": "string"}'})
self.r.hmset('metric:metric1', {'network_location': '?', 'type': 'integer'})
self.r.hmset('metric:metric2', {'network_location': '?', 'type': 'integer'})
3 changes: 2 additions & 1 deletion test-requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@
# process, which may cause wedges in the gate later.

mock>=2.0 # BSD
coveralls>=1.1
coveralls>=1.1
httmock

0 comments on commit 319f410

Please sign in to comment.