PublicTests.test_public_omaha_update()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
c 0
b 0
f 0
dl 0
loc 8
rs 9.4285
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