1
|
|
|
|
2
|
|
|
import os |
3
|
|
|
from lxml import objectify |
4
|
|
|
|
5
|
|
|
from django.test import LiveServerTestCase, override_settings |
6
|
|
|
from django.core.files.uploadedfile import SimpleUploadedFile |
7
|
|
|
from django.conf import settings |
8
|
|
|
from django.db import connections |
9
|
|
|
from django.core.urlresolvers import reverse |
10
|
|
|
|
11
|
|
|
import requests |
12
|
|
|
|
13
|
|
|
from crash.models import Crash |
14
|
|
|
from omaha.models import Request, AppRequest |
15
|
|
|
from feedback.models import Feedback |
16
|
|
|
from sparkle.factories import SparkleVersionFactory |
17
|
|
|
from omaha.factories import ChannelFactory, ApplicationFactory |
18
|
|
|
from feedback.tests.test_views import PB_FILE |
19
|
|
|
|
20
|
|
|
|
21
|
|
|
class PublicTests(LiveServerTestCase): |
22
|
|
|
|
23
|
|
|
def setUp(self): |
24
|
|
|
if settings.IS_PRIVATE or connections['default'].settings_dict['ENGINE'] != 'django.db.backends.postgresql_psycopg2': |
25
|
|
|
self.skipTest('Live server should be public with postgreSQL database') |
26
|
|
|
connections['default'].settings_dict['USER'] = os.environ.get('DB_PUBLIC_USER') |
27
|
|
|
connections['default'].settings_dict['PASSWORD'] = os.environ.get('DB_PUBLIC_PASSWORD') |
28
|
|
|
connections['default'].close() |
29
|
|
|
url = '%s/%s' % (self.live_server_url, 'admin/') |
30
|
|
|
resp = requests.get(url) |
31
|
|
|
self.assertEqual(resp.status_code, 404) |
32
|
|
|
|
33
|
|
|
def tearDown(self): |
34
|
|
|
connections['default'].settings_dict['USER'] = os.environ.get('DB_USER', 'postgres') |
35
|
|
|
connections['default'].settings_dict['PASSWORD'] = os.environ.get('DB_PASSWORD', '') |
36
|
|
|
connections['default'].close() |
37
|
|
|
|
38
|
|
|
@override_settings( |
39
|
|
|
CELERY_ALWAYS_EAGER=False, |
40
|
|
|
CELERY_EAGER_PROPAGATES_EXCEPTIONS=False, |
41
|
|
|
) |
42
|
|
|
def test_public_crash_upload(self): |
43
|
|
|
url = '%s%s' % (self.live_server_url, reverse('crash')) |
44
|
|
|
mini_dump_file = SimpleUploadedFile("minidump.dat", b"content") |
45
|
|
|
form_data = dict( |
46
|
|
|
appid='{D0AB2EBC-931B-4013-9FEB-C9C4C2225C8C}', |
47
|
|
|
userid='{2882CF9B-D9C2-4edb-9AAF-8ED5FCF366F7}', |
48
|
|
|
) |
49
|
|
|
files = dict( |
50
|
|
|
upload_file_minidump=mini_dump_file, |
51
|
|
|
) |
52
|
|
|
self.assertEqual(Crash.objects.all().count(), 0) |
53
|
|
|
response = requests.post(url, form_data, files=files) |
54
|
|
|
self.assertEqual(response.status_code, 200) |
55
|
|
|
self.assertEqual(Crash.objects.all().count(), 1) |
56
|
|
|
obj = Crash.objects.get() |
57
|
|
|
self.assertEqual(response.content.decode(), str(obj.pk)) |
58
|
|
|
self.assertIsNotNone(obj.upload_file_minidump) |
59
|
|
|
|
60
|
|
|
def test_public_sparkle_update(self): |
61
|
|
|
ChannelFactory._meta.database = 'root' |
62
|
|
|
channel_name = 'test' |
63
|
|
|
channel = ChannelFactory(name=channel_name) |
64
|
|
|
app_name = 'SparrowTestApp' |
65
|
|
|
ApplicationFactory._meta.database='root' |
66
|
|
|
app = ApplicationFactory(name=app_name) |
67
|
|
|
file = SimpleUploadedFile("test.dmg", b"content") |
68
|
|
|
SparkleVersionFactory._meta.database='root' |
69
|
|
|
SparkleVersionFactory.create(channel=channel, app=app, file=file) |
70
|
|
|
url = '%s%s' % (self.live_server_url, reverse('sparkle_appcast', kwargs=dict(app_name=app_name, channel=channel_name))) # replace by reverse |
71
|
|
|
resp = requests.get(url) |
72
|
|
|
root = objectify.fromstring(resp.content) |
73
|
|
|
self.assertTrue(app_name in str(root.channel.item.title)) |
74
|
|
|
|
75
|
|
|
def test_public_omaha_update(self): |
76
|
|
|
url = '%s%s' % (self.live_server_url, reverse('update')) |
77
|
|
|
body = '<?xml version="1.0" encoding="UTF-8"?> <request installsource="scheduler" ismachine="0" protocol="3.0" requestid="{F77BCC0B-BB7C-4396-8071-01063EB72E4F}" sessionid="{81586D86-30A4-44CA-B396-0D8AC0113836}" testsource="auto" version="1.3.25.0"> <os arch="x64" platform="win" sp="Service Pack 1" version="6.1"/> <app appid="{8A76FC95-0086-4BCE-9517-DC09DDB5652F}" brand="GGLS" client="" installage="4" lang="en" nextversion="" version="36.0.2060.0"> <updatecheck/> </app> <app appid="{F07B3878-CD6F-4B96-B52F-95C4D23077E0}" brand="" client="" installage="6" lang="en" nextversion="13.0.782.112" version=""> <event errorcode="0" eventresult="1" eventtype="9" extracode1="0"/> <event errorcode="0" eventresult="1" eventtype="5" extracode1="0"/> <event errorcode="-2147219440" eventresult="4" eventtype="2" extracode1="268435463"/> </app> </request>' |
78
|
|
|
headers = {'Content-Type': 'application/xml'} |
79
|
|
|
resp = requests.post(url, data=body, headers=headers) |
80
|
|
|
self.assertEqual(resp.status_code, 200) |
81
|
|
|
self.assertEqual(Request.objects.count(), 1) |
82
|
|
|
self.assertEqual(AppRequest.objects.count(), 1) |
83
|
|
|
|
84
|
|
|
def test_public_feedback(self): |
85
|
|
|
with open(PB_FILE, 'rb') as f: |
86
|
|
|
body = f.read() |
87
|
|
|
self.assertEqual(Feedback.objects.all().count(), 0) |
88
|
|
|
response = self.client.post( |
89
|
|
|
reverse('feedback'), |
90
|
|
|
data=body, |
91
|
|
|
content_type='application/x-protobuf', |
92
|
|
|
REMOTE_ADDR="8.8.8.8" |
93
|
|
|
) |
94
|
|
|
self.assertEqual(response.status_code, 200) |
95
|
|
|
self.assertEqual(Feedback.objects.all().count(), 1) |
96
|
|
|
|
97
|
|
|
def test_url(self): |
98
|
|
|
private_urls = ['/admin/', '/api/'] |
99
|
|
|
for url in private_urls: |
100
|
|
|
resp = requests.get('%s%s' % (self.live_server_url, url)) |
101
|
|
|
self.assertEqual(resp.status_code, 404) |
102
|
|
|
|