Skip to content
This repository has been archived by the owner on Jun 12, 2018. It is now read-only.

Commit

Permalink
Config UI for HTTP API message length limit.
Browse files Browse the repository at this point in the history
  • Loading branch information
jerith committed Dec 15, 2014
1 parent d72dd8a commit e8b53e2
Show file tree
Hide file tree
Showing 4 changed files with 122 additions and 3 deletions.
58 changes: 55 additions & 3 deletions go/apps/http_api/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ def test_edit_view(self):
'metric_store': 'foo_metric_store',
'ignore_events': False,
'ignore_messages': False,

'content_length_limit': None,
}
})

Expand All @@ -70,7 +70,7 @@ def test_edit_view_no_event_url(self):
'metric_store': 'foo_metric_store',
'ignore_events': False,
'ignore_messages': False,

'content_length_limit': None,
}
})
self.assertEqual(conversation.config, {})
Expand Down Expand Up @@ -99,10 +99,62 @@ def test_edit_view_no_push_urls(self):
'metric_store': 'foo_metric_store',
'ignore_events': False,
'ignore_messages': False,

'content_length_limit': None,
}
})
self.assertEqual(conversation.config, {})
response = self.client.get(conv_helper.get_view_url('edit'))
self.assertContains(response, 'foo_metric_store')
self.assertEqual(response.status_code, 200)

def test_edit_view_content_length_limit(self):
conv_helper = self.app_helper.create_conversation_helper()
conversation = conv_helper.get_conversation()
self.assertEqual(conversation.config, {})
response = self.client.post(conv_helper.get_view_url('edit'), {
'http_api-api_tokens': 'token',
'http_api-push_message_url': 'http://messages/',
'http_api-push_event_url': 'http://events/',
'http_api-metric_store': 'foo_metric_store',
'http_api-content_length_limit': '160',
})
self.assertRedirects(response, conv_helper.get_view_url('show'))

reloaded_conv = conv_helper.get_conversation()
self.assertEqual(reloaded_conv.config, {
'http_api': {
'push_event_url': 'http://events/',
'push_message_url': 'http://messages/',
'api_tokens': ['token'],
'metric_store': 'foo_metric_store',
'ignore_events': False,
'ignore_messages': False,
'content_length_limit': 160,
}
})

# Now unset the limit
response = self.client.get(conv_helper.get_view_url('edit'))
self.assertContains(response, '160')
self.assertEqual(response.status_code, 200)
response = self.client.post(conv_helper.get_view_url('edit'), {
'http_api-api_tokens': 'token',
'http_api-push_message_url': 'http://messages/',
'http_api-push_event_url': 'http://events/',
'http_api-metric_store': 'foo_metric_store',
'http_api-content_length_limit': '',
})
self.assertRedirects(response, conv_helper.get_view_url('show'))

reloaded_conv = conv_helper.get_conversation()
self.assertEqual(reloaded_conv.config, {
'http_api': {
'push_event_url': 'http://events/',
'push_message_url': 'http://messages/',
'api_tokens': ['token'],
'metric_store': 'foo_metric_store',
'ignore_events': False,
'ignore_messages': False,
'content_length_limit': None,
}
})
6 changes: 6 additions & 0 deletions go/apps/http_api/view_definition.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ class TokenForm(forms.Form):
metric_store = forms.CharField(
help_text='Which store to publish metrics to.',
required=False)
content_length_limit = forms.IntegerField(
help_text=('Optional content length limit. If set, messages with'
' content longer than this will be rejected.'),
required=False)

@staticmethod
def initial_from_config(data):
Expand All @@ -34,6 +38,7 @@ def initial_from_config(data):
'push_message_url': data.get('push_message_url', None),
'push_event_url': data.get('push_event_url', None),
'metric_store': data.get('metric_store', DEFAULT_METRIC_STORE),
'content_length_limit': data.get('content_length_limit', None),
}

def to_config(self):
Expand All @@ -43,6 +48,7 @@ def to_config(self):
'push_message_url': data['push_message_url'] or None,
'push_event_url': data['push_event_url'] or None,
'metric_store': data.get('metric_store') or DEFAULT_METRIC_STORE,
'content_length_limit': data.get('content_length_limit', None),
# The worker code checks these, but we don't provide config UI for
# them. They should always be False.
'ignore_events': False,
Expand Down
55 changes: 55 additions & 0 deletions go/apps/http_api_nostream/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ def test_edit_view(self):
'metric_store': 'foo_metric_store',
'ignore_events': False,
'ignore_messages': False,
'content_length_limit': None,
}
})
self.assertEqual(conversation.config, {})
Expand Down Expand Up @@ -94,6 +95,7 @@ def test_edit_view_ignore_messages(self):
'metric_store': 'foo_metric_store',
'ignore_events': False,
'ignore_messages': True,
'content_length_limit': None,
}
})
self.assertEqual(conversation.config, {})
Expand Down Expand Up @@ -122,13 +124,66 @@ def test_edit_view_ignore_events(self):
'metric_store': 'foo_metric_store',
'ignore_events': True,
'ignore_messages': False,
'content_length_limit': None,
}
})
self.assertEqual(conversation.config, {})
response = self.client.get(conv_helper.get_view_url('edit'))
self.assertContains(response, 'foo_metric_store')
self.assertEqual(response.status_code, 200)

def test_edit_view_content_length_limit(self):
conv_helper = self.app_helper.create_conversation_helper()
conversation = conv_helper.get_conversation()
self.assertEqual(conversation.config, {})
response = self.client.post(conv_helper.get_view_url('edit'), {
'http_api_nostream-api_tokens': 'token',
'http_api_nostream-push_message_url': 'http://messages/',
'http_api_nostream-push_event_url': 'http://events/',
'http_api_nostream-metric_store': 'foo_metric_store',
'http_api_nostream-content_length_limit': '160',
})
self.assertRedirects(response, conv_helper.get_view_url('show'))

reloaded_conv = conv_helper.get_conversation()
self.assertEqual(reloaded_conv.config, {
'http_api_nostream': {
'push_event_url': 'http://events/',
'push_message_url': 'http://messages/',
'api_tokens': ['token'],
'metric_store': 'foo_metric_store',
'ignore_events': False,
'ignore_messages': False,
'content_length_limit': 160,
}
})

# Now unset the limit
response = self.client.get(conv_helper.get_view_url('edit'))
self.assertContains(response, '160')
self.assertEqual(response.status_code, 200)
response = self.client.post(conv_helper.get_view_url('edit'), {
'http_api_nostream-api_tokens': 'token',
'http_api_nostream-push_message_url': 'http://messages/',
'http_api_nostream-push_event_url': 'http://events/',
'http_api_nostream-metric_store': 'foo_metric_store',
'http_api_nostream-content_length_limit': '',
})
self.assertRedirects(response, conv_helper.get_view_url('show'))

reloaded_conv = conv_helper.get_conversation()
self.assertEqual(reloaded_conv.config, {
'http_api_nostream': {
'push_event_url': 'http://events/',
'push_message_url': 'http://messages/',
'api_tokens': ['token'],
'metric_store': 'foo_metric_store',
'ignore_events': False,
'ignore_messages': False,
'content_length_limit': None,
}
})

def test_get_edit_view_no_config(self):
conv_helper = self.app_helper.create_conversation_helper()
conversation = conv_helper.get_conversation()
Expand Down
6 changes: 6 additions & 0 deletions go/apps/http_api_nostream/view_definition.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ class TokenForm(forms.Form):
metric_store = forms.CharField(
help_text='Which store to publish metrics to.',
required=False)
content_length_limit = forms.IntegerField(
help_text=('Optional content length limit. If set, messages with'
' content longer than this will be rejected.'),
required=False)

def clean(self):
cleaned_data = super(TokenForm, self).clean()
Expand Down Expand Up @@ -54,6 +58,7 @@ def initial_from_config(data):
'metric_store': data.get('metric_store', DEFAULT_METRIC_STORE),
'ignore_events': data.get('ignore_events', False),
'ignore_messages': data.get('ignore_messages', False),
'content_length_limit': data.get('content_length_limit', None),
}

def to_config(self):
Expand All @@ -65,6 +70,7 @@ def to_config(self):
'metric_store': data.get('metric_store') or DEFAULT_METRIC_STORE,
'ignore_events': data.get('ignore_events', False),
'ignore_messages': data.get('ignore_messages', False),
'content_length_limit': data.get('content_length_limit', None),
}


Expand Down

0 comments on commit e8b53e2

Please sign in to comment.