Skip to content

Commit

Permalink
Add static/dynamic policy creation tests
Browse files Browse the repository at this point in the history
  • Loading branch information
gerardparis committed Oct 4, 2016
1 parent d8ad2c2 commit 200f9c2
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 4 deletions.
14 changes: 13 additions & 1 deletion api/filters/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from rest_framework import status
from rest_framework.test import APIRequestFactory

from .views import dependency_list, dependency_detail, storlet_list, storlet_detail, storlet_list_deployed, filter_deploy, StorletData
from .views import dependency_list, dependency_detail, storlet_list, storlet_detail, storlet_list_deployed, filter_deploy, unset_filter, StorletData


# Tests use database=10 instead of 0.
Expand Down Expand Up @@ -400,6 +400,18 @@ def test_delete_dependency_ok(self, mock_is_valid_request):
dependencies = json.loads(response.content)
self.assertEqual(len(dependencies), 0)

@mock.patch('filters.views.swift_client.delete_object')
def test_unset_filter_ok(self, mock_delete_object, mock_is_valid_request):
data20 = {'filter_name': 'XXXXX'}
data21 = {'filter_name': 'test-1.0.jar'}
self.r.hmset('pipeline:AUTH_0123456789abcdef', {'20': json.dumps(data20), '21': json.dumps(data21)})
unset_filter(self.r, '0123456789abcdef', {'filter_type':'storlet', 'filter_name': 'test-1.0.jar'}, 'fake_token')
mock_delete_object.assert_called_with(settings.SWIFT_URL + settings.SWIFT_API_VERSION + "/AUTH_0123456789abcdef",
'fake_token', "storlet", "test-1.0.jar", mock.ANY, mock.ANY, mock.ANY,
mock.ANY, mock.ANY)
self.assertFalse(self.r.hexists("pipeline:AUTH_0123456789abcdef", "21")) # 21 was deleted
self.assertTrue(self.r.hexists("pipeline:AUTH_0123456789abcdef", "20")) # 20 was not deleted

#
# Aux methods
#
Expand Down
75 changes: 73 additions & 2 deletions api/registry/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,77 @@ def test_registry_dynamic_policy(self, mock_is_valid_request):
json_data = json.loads(response.content)
self.assertEqual(len(json_data), 0) # is empty

@mock.patch('registry.views.do_action')
def test_registry_static_policy_create_ok(self, mock_do_action, mock_is_valid_request):
mock_is_valid_request.return_value = 'fake_token'
self.setup_dsl_parser_data()

# Create an instance of a POST request.
data = "FOR TENANT:1234567890abcdef DO SET compression"
request = self.factory.post('/registry/static_policy', data, content_type='text/plain')
request.META['HTTP_X_AUTH_TOKEN'] = 'fake_token'
response = policy_list(request)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertTrue(mock_do_action.called)

@mock.patch('registry.views.set_filter')
def test_registry_static_policy_create_set_filter_ok(self, mock_set_filter, mock_is_valid_request):
mock_is_valid_request.return_value = 'fake_token'
self.setup_dsl_parser_data()

# Create an instance of a POST request.
data = "FOR TENANT:1234567890abcdef DO SET compression"
request = self.factory.post('/registry/static_policy', data, content_type='text/plain')
request.META['HTTP_X_AUTH_TOKEN'] = 'fake_token'
response = policy_list(request)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertTrue(mock_set_filter.called)

@mock.patch('registry.views.deploy_policy')
def test_registry_dynamic_policy_create_ok(self, mock_deploy_policy, mock_is_valid_request):
mock_is_valid_request.return_value = 'fake_token'
self.setup_dsl_parser_data()

# Create an instance of a POST request.
data = "FOR TENANT:1234567890abcdef WHEN metric1 > 5 DO SET compression"
request = self.factory.post('/registry/dynamic_policy', data, content_type='text/plain')
request.META['HTTP_X_AUTH_TOKEN'] = 'fake_token'
response = policy_list(request)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertTrue(mock_deploy_policy.called)

@mock.patch('registry.views.host')
@mock.patch('registry.views.create_local_host')
def test_registry_dynamic_policy_create_spawn_id_ok(self, mock_create_local_host, mock_host, mock_is_valid_request):
mock_is_valid_request.return_value = 'fake_token'
self.setup_dsl_parser_data()

# Create an instance of a POST request.
data = "FOR TENANT:1234567890abcdef WHEN metric1 > 5 DO SET compression"
request = self.factory.post('/registry/dynamic_policy', data, content_type='text/plain')
request.META['HTTP_X_AUTH_TOKEN'] = 'fake_token'
response = policy_list(request)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertTrue(mock_create_local_host.called)
self.assertTrue(mock_host.spawn_id.called)
self.assertTrue(self.r.exists('policy:2'))
policy_data = self.r.hgetall('policy:2')
self.assertEqual(policy_data['policy'], 'FOR TENANT:1234567890abcdef DO SET compression')
self.assertEqual(policy_data['condition'], 'metric1 > 5')

# def test_registry_static_policy_create_with_inexistent_filter(self, mock_is_valid_request):
# mock_is_valid_request.return_value = 'fake_token'
# self.setup_dsl_parser_data()
# self.r.delete("filter:1") # delete filter to cause an exception
#
# # Create an instance of a POST request.
# data = "FOR TENANT:1234567890abcdef DO SET compression"
# request = self.factory.post('/registry/static_policy', data, content_type='text/plain')
# request.META['HTTP_X_AUTH_TOKEN'] = 'fake_token'
# response = policy_list(request)
# self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)


#
# Metric tests
#
Expand Down Expand Up @@ -1090,8 +1161,8 @@ def create_object_type_docs(self, mock_is_valid_request):
self.assertEqual(response.status_code, status.HTTP_201_CREATED)

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', {'identifier': '1', 'valid_parameters': '{"cparam1": "integer", "cparam2": "integer", "cparam3": "integer"}'})
self.r.hmset('dsl_filter:encryption', {'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'})

Expand Down
2 changes: 1 addition & 1 deletion api/registry/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -882,7 +882,7 @@ def policy_list(request):
# print("The rule: " + rule_string + " cannot be parsed")
# print("Exception message", e)
return JSONResponse('Please, review the rule, register the dsl filter and start the workload '
'metric before create a new policy', status=status.HTTP_401_UNAUTHORIZED)
'metric before creating a new policy', status=status.HTTP_401_UNAUTHORIZED)

return JSONResponse('Policies added successfully!', status=status.HTTP_201_CREATED)

Expand Down

0 comments on commit 200f9c2

Please sign in to comment.