Completed
Push — master ( 646ecf...07a97f )
by
unknown
48s
created

CrashModelTest.tearDown()   A

Complexity

Conditions 1

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
c 0
b 0
f 0
dl 0
loc 3
rs 10
1
# coding: utf8
2
3
"""
4
This software is licensed under the Apache 2 license, quoted below.
5
6
Copyright 2014 Crystalnix Limited
7
8
Licensed under the Apache License, Version 2.0 (the "License"); you may not
9
use this file except in compliance with the License. You may obtain a copy of
10
the License at
11
12
    http://www.apache.org/licenses/LICENSE-2.0
13
14
Unless required by applicable law or agreed to in writing, software
15
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
16
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
17
License for the specific language governing permissions and limitations under
18
the License.
19
"""
20
21
import os
22
23
from django import test
24
from django.core.files.uploadedfile import SimpleUploadedFile
25
from django.core.files.storage import DefaultStorage
26
27
from clom.shell import CommandError
28
from mock import patch
29
from freezegun import freeze_time
30
31
from crash.models import Crash
32
from crash.tasks import processing_crash_dump, get_sentry_link
33
from omaha.tests.utils import temporary_media_root
34
35
36
BASE_DIR = os.path.dirname(__file__)
37
TEST_DATA_DIR = os.path.join(BASE_DIR, 'testdata')
38
SYM_FILE = os.path.join(TEST_DATA_DIR, 'BreakpadTestApp.sym')
39
CRASH_DUMP_FILE = os.path.join(TEST_DATA_DIR, '7b05e196-7e23-416b-bd13-99287924e214.dmp')
40
INCORRECT_CRASH_DUMP_FILE = os.path.join(TEST_DATA_DIR, 'incorrect_minidump.dmp')
41
SYMBOLS_PATH = os.path.join(TEST_DATA_DIR, 'symbols')
42
STACKTRACE_PATH = os.path.join(TEST_DATA_DIR, 'stacktrace.txt')
43
44
45
class CrashModelTest(test.TestCase):
46
    @temporary_media_root(
47
        MEDIA_URL='http://omaha-test.s3.amazonaws.com/',
48
        CRASH_S3_MOUNT_PATH=TEST_DATA_DIR,
49
        CRASH_SYMBOLS_PATH=SYMBOLS_PATH,
50
    )
51
    @test.override_settings(CELERY_EAGER_PROPAGATES_EXCEPTIONS=False,)
52
    @freeze_time("2014-12-11")
53
    @patch('crash.utils.send_stacktrace_sentry')
54
    @patch('crash.utils.client')
55
    @patch('uuid.uuid4', lambda: '92d51f8b-f67a-4d80-ac7f-9ab8018297d9')
56
    def test_model(self, mock_send_stacktrace_sentry, mock_client):
57
        meta = dict(
58
            lang='en',
59
            ver='1.0.0.1',
60
            channel='alpha'
61
        )
62
        app_id = '{D0AB2EBC-931B-4013-9FEB-C9C4C2225C8C}'
63
        user_id = '{2882CF9B-D9C2-4edb-9AAF-8ED5FCF366F7}'
64
        with open(CRASH_DUMP_FILE, 'rb') as f:
65
            obj = Crash.objects.create(
66
                appid=app_id,
67
                userid=user_id,
68
                upload_file_minidump=SimpleUploadedFile('7b05e196-7e23-416b-bd13-99287924e214.dmp', f.read()),
69
                meta=meta,
70
            )
71
72
        self.assertIsNone(obj.stacktrace)
73
        processing_crash_dump(obj.pk)
74
75
        with open(STACKTRACE_PATH, 'rb') as f:
76
            stacktrace = f.read()
77
78
        crash = Crash.objects.get(pk=obj.pk)
79
        self.assertEqual(crash.stacktrace, stacktrace.decode())
80
        self.assertIsNotNone(crash.stacktrace_json)
81
        self.assertEqual(crash.stacktrace_json['crash_info']['type'], 'EXCEPTION_ACCESS_VIOLATION_WRITE')
82
        self.assertEqual(crash.signature, 'crashedFunc()')
83
        self.assertEqual(crash.os, 'Windows NT')
84
        self.assertEqual(crash.build_number, '1.0.0.1')
85
        self.assertEqual(crash.channel, 'alpha')
86
87
    @temporary_media_root(
88
        MEDIA_URL='http://omaha-test.s3.amazonaws.com/',
89
        CRASH_S3_MOUNT_PATH=TEST_DATA_DIR,
90
        CRASH_SYMBOLS_PATH=SYMBOLS_PATH,
91
    )
92
    @freeze_time("2014-12-11")
93
    @patch('crash.utils.send_stacktrace_sentry')
94
    @patch('crash.utils.client')
95
    @patch('uuid.uuid4', lambda: '92d51f8b-f67a-4d80-ac7f-9ab8018297d9')
96
    def test_incorrect_dump(self, mock_send_stacktrace_sentry, mock_client):
97
        meta = dict(
98
            lang='en',
99
            ver='1.0.0.1',
100
        )
101
        app_id = '{D0AB2EBC-931B-4013-9FEB-C9C4C2225C8C}'
102
        user_id = '{2882CF9B-D9C2-4edb-9AAF-8ED5FCF366F7}'
103
        with open(INCORRECT_CRASH_DUMP_FILE, 'rb') as f:
104
            obj = dict(
105
                appid=app_id,
106
                userid=user_id,
107
                upload_file_minidump=SimpleUploadedFile('incorrect_minidump.dmp', f.read()),
108
                meta=meta,
109
            )
110
            self.assertRaises(CommandError, Crash.objects.create, **obj)
111
112
    @temporary_media_root(
113
        MEDIA_URL='http://omaha-test.s3.amazonaws.com/',
114
        CRASH_S3_MOUNT_PATH=TEST_DATA_DIR,
115
        CRASH_SYMBOLS_PATH=SYMBOLS_PATH,
116
    )
117
    @test.override_settings(CELERY_ALWAYS_EAGER=False,)
118
    @freeze_time("2014-12-11")
119
    @patch('crash.utils.send_stacktrace_sentry', lambda: None)
120
    @patch('crash.utils.client')
121
    @patch('uuid.uuid4', lambda: '92d51f8b-f67a-4d80-ac7f-9ab8018297d9')
122
    def test_get_sentry_link(self, mock_client):
123
        meta = dict(
124
            lang='en',
125
            ver='1.0.0.1',
126
        )
127
        app_id = '{D0AB2EBC-931B-4013-9FEB-C9C4C2225C8C}'
128
        user_id = '{2882CF9B-D9C2-4edb-9AAF-8ED5FCF366F7}'
129
        with open(CRASH_DUMP_FILE, 'rb') as f:
130
            obj = Crash.objects.create(
131
                appid=app_id,
132
                userid=user_id,
133
                upload_file_minidump=SimpleUploadedFile('7b05e196-7e23-416b-bd13-99287924e214.dmp', f.read()),
134
                meta=meta,
135
            )
136
        with patch('requests.get') as mocked:
137
            instance = mocked.return_value
138
            instance.json.return_value = {'groupID': '1', 'id': '2'}
139
            get_sentry_link(obj.pk, '123')
140
        obj = Crash.objects.get(id=obj.id)
141
        self.assertEqual(obj.eventid, '2')
142
        self.assertEqual(obj.groupid, '1')
143