diff options
-rw-r--r-- | .travis.yml | 8 | ||||
-rw-r--r-- | omaha_server/crash/tests/test_api.py | 11 | ||||
-rw-r--r-- | omaha_server/crash/tests/test_utils.py | 4 | ||||
-rw-r--r-- | omaha_server/crash/utils.py | 2 | ||||
-rw-r--r-- | omaha_server/feedback/tests/test_api.py | 6 | ||||
-rwxr-xr-x | omaha_server/manage.py | 2 | ||||
-rw-r--r-- | omaha_server/omaha/tests/test_api.py | 80 | ||||
-rw-r--r-- | omaha_server/omaha/tests/test_urls.py | 5 | ||||
-rw-r--r-- | omaha_server/omaha/tests/test_views_admin.py | 9 | ||||
-rw-r--r-- | omaha_server/omaha_server/settings_test.py | 9 | ||||
-rw-r--r-- | omaha_server/omaha_server/utils.py | 20 | ||||
-rw-r--r-- | omaha_server/sparkle/tests/test_api.py | 6 | ||||
-rw-r--r-- | pavement.py | 1 |
13 files changed, 125 insertions, 38 deletions
diff --git a/.travis.yml b/.travis.yml index 01107e6..41392d0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,13 @@ matrix: - env: TOX_ENV=py34 include: - python: "2.7" - env: TOX_ENV=py27 + env: + - TOX_ENV=py27 + - OMAHA_SERVER_PRIVATE=True + - python: "2.7" + env: + - TOX_ENV=py27 + - OMAHA_SERVER_PRIVATE=False - python: "3.4" env: TOX_ENV=py34 - python: "2.7" diff --git a/omaha_server/crash/tests/test_api.py b/omaha_server/crash/tests/test_api.py index 28d0710..7b0d7e1 100644 --- a/omaha_server/crash/tests/test_api.py +++ b/omaha_server/crash/tests/test_api.py @@ -32,6 +32,7 @@ from crash.factories import SymbolsFactory, CrashFactory from omaha.tests.utils import temporary_media_root from omaha.tests.test_api import BaseTest +from omaha_server.utils import is_private BASE_DIR = os.path.dirname(__file__) @@ -40,19 +41,22 @@ SYM_FILE = os.path.join(TEST_DATA_DIR, 'BreakpadTestApp.sym') class SymbolsTest(BaseTest, APITestCase): - url = reverse('symbols-list') + url = 'symbols-list' url_detail = 'symbols-detail' factory = SymbolsFactory serializer = SymbolsSerializer + @is_private @temporary_media_root(MEDIA_URL='http://cache.pack.google.com/edgedl/chrome/install/782.112/') def test_detail(self): super(SymbolsTest, self).test_detail() + @is_private @temporary_media_root(MEDIA_URL='http://cache.pack.google.com/edgedl/chrome/install/782.112/') def test_list(self): super(SymbolsTest, self).test_list() + @is_private @temporary_media_root(MEDIA_URL='http://cache.pack.google.com/edgedl/chrome/install/782.112/') def test_create(self): with open(SYM_FILE, 'rb') as f: @@ -64,6 +68,7 @@ class SymbolsTest(BaseTest, APITestCase): self.assertEqual(symbols.debug_id, 'C1C0FA629EAA4B4D9DD2ADE270A231CC1') self.assertEqual(symbols.debug_file, 'BreakpadTestApp.pdb') + @is_private def test_duplicate(self): with open(SYM_FILE, 'rb') as f: data = dict(file=SimpleUploadedFile('./BreakpadTestApp.sym', f.read())) @@ -76,17 +81,19 @@ class SymbolsTest(BaseTest, APITestCase): self.assertEqual(response.data['message'], 'Duplicate symbol') class CrashTest(BaseTest, APITestCase): - url = reverse('crash-list') + url = 'crash-list' url_detail = 'crash-detail' factory = CrashFactory serializer = CrashSerializer + @is_private def test_list(self): response = self.client.get(self.url, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['count'], 10) self.assertEqual(self.serializer(self.objects, many=True).data, response.data['results'][::-1]) + @is_private def test_create(self): response = self.client.post(self.url, {}) self.assertEqual(response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED) diff --git a/omaha_server/crash/tests/test_utils.py b/omaha_server/crash/tests/test_utils.py index 2015c33..d0084da 100644 --- a/omaha_server/crash/tests/test_utils.py +++ b/omaha_server/crash/tests/test_utils.py @@ -28,6 +28,7 @@ from django import test from django.core.files.uploadedfile import SimpleUploadedFile from django.core.urlresolvers import reverse +from omaha_server.utils import is_private from crash.utils import ( get_stacktrace, add_signature_to_frame, @@ -108,6 +109,7 @@ class SignatureTest(test.TestCase): class SendStackTraceTest(test.TestCase): @patch('crash.utils.client') @test.override_settings(HOST_NAME='example.com') + @is_private(False) def test_send_stacktrace_sentry(self, mock_client): meta = dict( lang='en', @@ -129,7 +131,7 @@ class SendStackTraceTest(test.TestCase): extra = { 'crash_admin_panel_url': 'http://{}{}'.format( 'example.com', - reverse('admin:crash_crash_change', args=(crash.pk,))), + '/admin/crash/crash/%s/' % crash.pk), 'crashdump_url': crash.upload_file_minidump.url, 'lang': 'en', 'version': '1.0.0.1'} diff --git a/omaha_server/crash/utils.py b/omaha_server/crash/utils.py index d0616a7..b4b77e5 100644 --- a/omaha_server/crash/utils.py +++ b/omaha_server/crash/utils.py @@ -109,7 +109,7 @@ def send_stacktrace_sentry(crash): extra = dict( crash_admin_panel_url='http://{}{}'.format( settings.HOST_NAME, - reverse('admin:crash_crash_change', args=(crash.pk,))), + '/admin/crash/crash/%s/' % crash.pk), crashdump_url=crash.upload_file_minidump.url, ) diff --git a/omaha_server/feedback/tests/test_api.py b/omaha_server/feedback/tests/test_api.py index 8147390..4c86eee 100644 --- a/omaha_server/feedback/tests/test_api.py +++ b/omaha_server/feedback/tests/test_api.py @@ -30,18 +30,21 @@ from feedback.factories import FeedbackFactory from omaha.tests.utils import temporary_media_root from omaha.tests.test_api import BaseTest +from omaha_server.utils import is_private class FeedbackTest(BaseTest, APITestCase): - url = reverse('feedback-list') + url = 'feedback-list' url_detail = 'feedback-detail' factory = FeedbackFactory serializer = FeedbackSerializer + @is_private @temporary_media_root(MEDIA_URL='http://cache.pack.google.com/edgedl/chrome/install/782.112/') def test_detail(self): super(FeedbackTest, self).test_detail() + @is_private @temporary_media_root(MEDIA_URL='http://cache.pack.google.com/edgedl/chrome/install/782.112/') def test_list(self): response = self.client.get(self.url, format='json') @@ -49,6 +52,7 @@ class FeedbackTest(BaseTest, APITestCase): self.assertEqual(response.data['count'], 10) self.assertEqual(self.serializer(self.objects, many=True).data, response.data['results'][::-1]) + @is_private @temporary_media_root(MEDIA_URL='http://cache.pack.google.com/edgedl/chrome/install/782.112/') def test_create(self): response = self.client.post(self.url, {}) diff --git a/omaha_server/manage.py b/omaha_server/manage.py index 3cbff40..2ea4a4b 100755 --- a/omaha_server/manage.py +++ b/omaha_server/manage.py @@ -4,8 +4,6 @@ import sys if __name__ == "__main__": settings = "omaha_server.settings_test" if 'test' in sys.argv else 'omaha_server.settings' - if 'test' in sys.argv: - os.environ['OMAHA_SERVER_PRIVATE'] = 'True' os.environ.setdefault("DJANGO_SETTINGS_MODULE", settings) from django.core.management import execute_from_command_line diff --git a/omaha_server/omaha/tests/test_api.py b/omaha_server/omaha/tests/test_api.py index 9fcbf67..148b50b 100644 --- a/omaha_server/omaha/tests/test_api.py +++ b/omaha_server/omaha/tests/test_api.py @@ -32,6 +32,7 @@ from django.conf import settings from rest_framework import status from rest_framework.test import APITestCase, APIClient +from omaha_server.utils import is_private from omaha.statistics import userid_counting, get_users_versions, get_channel_statistics from omaha.utils import redis @@ -56,10 +57,20 @@ User = get_user_model() class BaseTest(object): url = None + url_args = () url_detail = None factory = None serializer = None maxDiff = None + is_private = True + + def _is_private(self): + if not self.is_private and not settings.IS_PRIVATE: + return True + elif self.is_private and settings.IS_PRIVATE: + return True + else: + return False def setUp(self): self.objects = self.factory.create_batch(10) @@ -68,17 +79,23 @@ class BaseTest(object): HTTP_AUTHORIZATION='Basic %s' % base64.b64encode(bytes('{}:{}'.format('test', 'secret'), 'utf8')).decode()) def test_unauthorized(self): + if not self._is_private(): + return client = APIClient() - response = client.get(self.url, format='json') + response = client.get(reverse(self.url, args=self.url_args), format='json') self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) def test_list(self): - response = self.client.get(self.url, format='json') + if not self._is_private(): + return + response = self.client.get(reverse(self.url, args=self.url_args), format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(len(response.data), 10) self.assertEqual(self.serializer(self.objects, many=True).data, response.data[::-1]) def test_detail(self): + if not self._is_private(): + return obj = self.objects[0] url = reverse(self.url_detail, kwargs=dict(pk=obj.pk)) @@ -88,79 +105,88 @@ class BaseTest(object): class AppTest(BaseTest, APITestCase): - url = reverse('application-list') + url = 'application-list' url_detail = 'application-detail' factory = ApplicationFactory serializer = AppSerializer + @is_private def test_create(self): data = dict(id='test_id', name='test_name') - response = self.client.post(self.url, data, format='json') + response = self.client.post(reverse(self.url + ), data, format='json') self.assertEqual(response.status_code, status.HTTP_201_CREATED) obj = Application.objects.get(id=response.data['id']) self.assertEqual(response.data, self.serializer(obj).data) class DataTest(BaseTest, APITestCase): - url = reverse('data-list') + url = 'data-list' url_detail = 'data-detail' factory = DataFactory serializer = DataSerializer + @is_private def test_create(self): app = ApplicationFactory.create() data = dict(name=0, app=app.pk) - response = self.client.post(self.url, data, format='json') + response = self.client.post(reverse(self.url), data, format='json') self.assertEqual(response.status_code, status.HTTP_201_CREATED) obj = Data.objects.get(id=response.data['id']) self.assertEqual(response.data, self.serializer(obj).data) class PlatformTest(BaseTest, APITestCase): - url = reverse('platform-list') + url = 'platform-list' url_detail = 'platform-detail' factory = PlatformFactory serializer = PlatformSerializer + @is_private def test_list(self): super(PlatformTest, self).test_list() + @is_private def test_create(self): data = dict(name='test_name') - response = self.client.post(self.url, data, format='json') + response = self.client.post(reverse(self.url), data, format='json') self.assertEqual(response.status_code, status.HTTP_201_CREATED) obj = Platform.objects.get(id=response.data['id']) self.assertEqual(response.data, self.serializer(obj).data) class ChannelTest(BaseTest, APITestCase): - url = reverse('channel-list') + url = 'channel-list' url_detail = 'channel-detail' factory = ChannelFactory serializer = ChannelSerializer + @is_private def test_create(self): data = dict(name='test_name') - response = self.client.post(self.url, data, format='json') + response = self.client.post(reverse(self.url), data, format='json') self.assertEqual(response.status_code, status.HTTP_201_CREATED) obj = Channel.objects.get(id=response.data['id']) self.assertEqual(response.data, self.serializer(obj).data) class VersionTest(BaseTest, APITestCase): - url = reverse('version-list') + url = 'version-list' url_detail = 'version-detail' factory = VersionFactory serializer = VersionSerializer + @is_private @temporary_media_root(MEDIA_URL='http://cache.pack.google.com/edgedl/chrome/install/782.112/') def test_detail(self): super(VersionTest, self).test_detail() + @is_private @temporary_media_root(MEDIA_URL='http://cache.pack.google.com/edgedl/chrome/install/782.112/') def test_list(self): super(VersionTest, self).test_list() + @is_private @temporary_media_root(MEDIA_URL='http://cache.pack.google.com/edgedl/chrome/install/782.112/') def test_create(self): data = dict( @@ -170,7 +196,7 @@ class VersionTest(BaseTest, APITestCase): version='1.2.3.4', file=SimpleUploadedFile("chrome.exe", b'content'), ) - response = self.client.post(self.url, data) + response = self.client.post(reverse(self.url), data) self.assertEqual(response.status_code, status.HTTP_201_CREATED) version = Version.objects.get(id=response.data['id']) self.assertEqual(response.data, self.serializer(version).data) @@ -178,15 +204,16 @@ class VersionTest(BaseTest, APITestCase): class ActionTest(BaseTest, APITestCase): - url = reverse('action-list') + url = 'action-list' url_detail = 'action-detail' factory = ActionFactory serializer = ActionSerializer + @is_private def test_create(self): version = VersionFactory.create() data = dict(event=1, version=version.pk) - response = self.client.post(self.url, data, format='json') + response = self.client.post(reverse(self.url), data, format='json') self.assertEqual(response.status_code, status.HTTP_201_CREATED) obj = Action.objects.get(id=response.data['id']) self.assertEqual(response.data, self.serializer(obj).data) @@ -245,37 +272,42 @@ class StatisticsMonthsMixin(object): ('December', 12)] self.data = dict(data=dict(self.users_statistics)) + @is_private def test_unauthorized(self): client = APIClient() - response = client.get(self.url, format='json') + response = client.get(reverse(self.url), format='json') self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) + @is_private def test_list(self): - response = self.client.get(self.url, format='json') + response = self.client.get(reverse(self.url), format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(self.serializer(self.data).data, response.data) class StatisticsMonthsListTest(StatisticsMonthsMixin, APITestCase): - url = reverse('api-statistics-months-list') + url = 'api-statistics-months-list' serializer = StatisticsMonthsSerializer class StatisticsMonthsDetailTest(StatisticsMonthsMixin, APITestCase): - url = reverse('api-statistics-months-detail', args=('app',)) + url = 'api-statistics-months-detail' + url_args = ('app',) serializer = StatisticsMonthsSerializer + @is_private def test_list(self): data_detail = self.data.copy() data_detail['data']['install_count'] = 0 data_detail['data']['update_count'] = 0 - response = self.client.get(self.url, format='json') + response = self.client.get(reverse(self.url, args=self.url_args), format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(self.serializer(data_detail).data, response.data) class StatisticsVersionsTest(StatisticsMonthsMixin, APITestCase): - url = reverse('api-statistics-versions', args=('app',)) + url = 'api-statistics-versions' + url_args = ('app',) serializer = StatisticsMonthsSerializer def setUp(self): @@ -285,7 +317,8 @@ class StatisticsVersionsTest(StatisticsMonthsMixin, APITestCase): class StatisticsChannelsTest(StatisticsMonthsMixin, APITestCase): - url = reverse('api-statistics-channels', args=('app',)) + url = 'api-statistics-channels' + url_args = ('app',) serializer = StatisticsMonthsSerializer def setUp(self): @@ -294,7 +327,7 @@ class StatisticsChannelsTest(StatisticsMonthsMixin, APITestCase): self.data = dict(data=dict(data)) class ServerVersionTest(APITestCase): - url = reverse('api-version') + url = 'api-version' serializer = ServerVersionSerializer def setUp(self): @@ -303,7 +336,8 @@ class ServerVersionTest(APITestCase): HTTP_AUTHORIZATION='Basic %s' % base64.b64encode(bytes('{}:{}'.format('test', 'secret'), 'utf8')).decode()) self.data = dict(version=settings.APP_VERSION) + @is_private def test(self): - response = self.client.get(self.url, format='json') + response = self.client.get(reverse(self.url), format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(self.serializer(self.data).data, response.data) diff --git a/omaha_server/omaha/tests/test_urls.py b/omaha_server/omaha/tests/test_urls.py index c875743..0b33300 100644 --- a/omaha_server/omaha/tests/test_urls.py +++ b/omaha_server/omaha/tests/test_urls.py @@ -21,6 +21,7 @@ the License. from django.core.urlresolvers import resolve, reverse from django.test import TestCase +from omaha_server.utils import is_private from omaha.views import UpdateView from omaha.views_admin import StatisticsView, StatisticsDetailView, RequestListView, AppRequestDetailView @@ -54,21 +55,25 @@ class Test(URLTestMixin, TestCase): def test_UpdateView(self): self.assert_url_matches_view(UpdateView, '/service/update2', 'update') + @is_private def test_StatisticsView(self): self.assert_url_matches_view(StatisticsView, '/admin/statistics/', 'omaha_statistics') + @is_private def test_StatisticsDetailView(self): self.assert_url_matches_view(StatisticsDetailView, '/admin/statistics/appName/', 'omaha_statistics_detail', url_args=('appName',)) + @is_private def test_RequestListView(self): self.assert_url_matches_view(RequestListView, '/admin/statistics/appName/requests/', 'omaha_request_list', url_args=('appName',)) + @is_private def test_AppRequestDetailView(self): self.assert_url_matches_view(AppRequestDetailView, '/admin/statistics/requests/123/', diff --git a/omaha_server/omaha/tests/test_views_admin.py b/omaha_server/omaha/tests/test_views_admin.py index db91775..69785b1 100644 --- a/omaha_server/omaha/tests/test_views_admin.py +++ b/omaha_server/omaha/tests/test_views_admin.py @@ -25,6 +25,7 @@ from django.contrib.auth import get_user_model from django.core.urlresolvers import reverse from pyquery import PyQuery as pq +from omaha_server.utils import is_private from omaha.factories import ApplicationFactory, RequestFactory, AppRequestFactory from omaha.models import Request, AppRequest from omaha.views_admin import ( @@ -43,6 +44,7 @@ class AdminViewStatisticsTest(TestCase): self.user = User.objects.create_superuser( username='test', email='test@example.com', password='test') + @is_private def test_statistics_view(self): view = StatisticsView() self.assertListEqual(list(view.get_queryset()), self.apps) @@ -58,26 +60,31 @@ class ViewsStaffMemberRequiredTest(TestCase): appid=self.app.id, ) + @is_private def test_omaha_statistics(self): url = reverse('omaha_statistics') response = self.client.get(url) self.assertRedirects(response, '/admin/login/?next=%s' % url) + @is_private def test_omaha_statistics_detail(self): url = reverse('omaha_statistics_detail', kwargs=dict(name=self.app.name)) response = self.client.get(url) self.assertRedirects(response, '/admin/login/?next=%s' % url) + @is_private def test_omaha_request_list(self): url = reverse('omaha_request_list', kwargs=dict(name=self.app.name)) response = self.client.get(url) self.assertRedirects(response, '/admin/login/?next=%s' % url) + @is_private def test_omaha_request_detail(self): url = reverse('omaha_request_detail', kwargs=dict(pk=self.app_request.pk)) response = self.client.get(url) self.assertRedirects(response, '/admin/login/?next=%s' % url) + @is_private def test_omaha_set_timezone(self): url = reverse('set_timezone') response = self.client.get(url) @@ -91,6 +98,7 @@ class AdminViewTimezoneTest(TestCase): username='test', email='test@example.com', password='test') self.client.login(username='test', password='test') + @is_private def test_set_timezone(self): url = reverse('set_timezone') timezone = 'Asia/Omsk' @@ -114,6 +122,7 @@ class FilteringAppRequestsByUserIdTest(TestCase): username='test', email='test@example.com', password='test') self.client.login(username='test', password='test') + @is_private def test_filtering(self): url = reverse('omaha_request_list', kwargs=dict(name=self.app.name)) data = {'request__userid': '', diff --git a/omaha_server/omaha_server/settings_test.py b/omaha_server/omaha_server/settings_test.py index fe64f53..14e7c99 100644 --- a/omaha_server/omaha_server/settings_test.py +++ b/omaha_server/omaha_server/settings_test.py @@ -1,9 +1,10 @@ # coding: utf8 -from .settings import * +import os +os.environ.setdefault('OMAHA_SERVER_PRIVATE', 'True') -IS_PRIVATE = True +from .settings import * class DisableMigrations(object): @@ -28,7 +29,7 @@ NOSE_ARGS = [ '--with-coverage', '--cover-package=omaha_server,omaha,crash,feedback,sparkle,healthcheck', '--cover-inclusive', - # '--with-doctest', + '--nologcapture', ] MIGRATION_MODULES = DisableMigrations() @@ -71,4 +72,4 @@ OMAHA_UID_KEY_PREFIX = 'test:uid' CRASH_SYMBOLS_PATH = os.path.join(BASE_DIR, 'crash', 'tests', 'testdata', 'symbols') CRASH_S3_MOUNT_PATH = os.path.join(BASE_DIR, 'crash', 'tests', 'testdata') -RAVEN_DSN_STACKTRACE = 'http://c5dc6f5ab74b4ab8a567f545b00cb138:c57ee00766cf497da102b7a83d731840@127.0.0.1/1'
\ No newline at end of file +RAVEN_DSN_STACKTRACE = 'http://c5dc6f5ab74b4ab8a567f545b00cb138:c57ee00766cf497da102b7a83d731840@127.0.0.1/1' diff --git a/omaha_server/omaha_server/utils.py b/omaha_server/omaha_server/utils.py index bef706c..52ec5bf 100644 --- a/omaha_server/omaha_server/utils.py +++ b/omaha_server/omaha_server/utils.py @@ -1,8 +1,26 @@ # coding: utf8 +from functools import wraps from django.conf import settings +class is_private(object): + def __init__(self, is_private=True): + self.is_private = is_private + + def __call__(self, test_func): + @wraps(test_func) + def inner(*args, **kwargs): + if not self.is_private and not settings.IS_PRIVATE: + return test_func(*args, **kwargs) + elif self.is_private and settings.IS_PRIVATE: + return test_func(*args, **kwargs) + else: + return + + return inner + + def show_toolbar(request): """ Default function to determine whether to show the toolbar on a given page. @@ -11,4 +29,4 @@ def show_toolbar(request): if request.is_ajax(): return False - return bool(settings.DEBUG)
\ No newline at end of file + return bool(settings.DEBUG) diff --git a/omaha_server/sparkle/tests/test_api.py b/omaha_server/sparkle/tests/test_api.py index ff399fa..823d91a 100644 --- a/omaha_server/sparkle/tests/test_api.py +++ b/omaha_server/sparkle/tests/test_api.py @@ -32,22 +32,26 @@ from sparkle.models import SparkleVersion from omaha.tests.utils import temporary_media_root from omaha.tests.test_api import BaseTest +from omaha_server.utils import is_private class VersionTest(BaseTest, APITestCase): - url = reverse('sparkleversion-list') + url = 'sparkleversion-list' url_detail = 'sparkleversion-detail' factory = SparkleVersionFactory serializer = SparkleVersionSerializer + @is_private @temporary_media_root(MEDIA_URL='http://cache.pack.google.com/edgedl/chrome/install/782.112/') def test_detail(self): super(VersionTest, self).test_detail() + @is_private @temporary_media_root(MEDIA_URL='http://cache.pack.google.com/edgedl/chrome/install/782.112/') def test_list(self): super(VersionTest, self).test_list() + @is_private @temporary_media_root(MEDIA_URL='http://cache.pack.google.com/edgedl/chrome/install/782.112/') def test_create(self): data = dict( diff --git a/pavement.py b/pavement.py index b637df3..b691a96 100644 --- a/pavement.py +++ b/pavement.py @@ -30,7 +30,6 @@ client = Client(os.environ.get('RAVEN_DNS')) @task def test(): - os.environ["OMAHA_SERVER_PRIVATE"] = 'True' sh('./manage.py test --settings=omaha_server.settings_test', cwd='omaha_server') |