Completed
Push — master ( d3d7ad...37bb4c )
by Egor
01:21
created

CrashModelTest   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 94
Duplicated Lines 0 %
Metric Value
wmc 12
dl 0
loc 94
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
B test_incorrect_dump() 0 24 3
B test_get_sentry_link() 0 31 5
B test_model() 0 36 4
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
26
# import requests
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
            version='1.0.0.1',
60
        )
61
        app_id = '{D0AB2EBC-931B-4013-9FEB-C9C4C2225C8C}'
62
        user_id = '{2882CF9B-D9C2-4edb-9AAF-8ED5FCF366F7}'
63
        with open(CRASH_DUMP_FILE, 'rb') as f:
64
            obj = Crash.objects.create(
65
                appid=app_id,
66
                userid=user_id,
67
                upload_file_minidump=SimpleUploadedFile('7b05e196-7e23-416b-bd13-99287924e214.dmp', f.read()),
68
                meta=meta,
69
            )
70
71
        self.assertIsNone(obj.stacktrace)
72
        processing_crash_dump(obj.pk)
73
74
        with open(STACKTRACE_PATH, 'rb') as f:
75
            stacktrace = f.read()
76
77
        crash = Crash.objects.get(pk=obj.pk)
78
        self.assertEqual(crash.stacktrace, stacktrace.decode())
79
        self.assertIsNotNone(crash.stacktrace_json)
80
        self.assertEqual(crash.stacktrace_json['crash_info']['type'], 'EXCEPTION_ACCESS_VIOLATION_WRITE')
81
        self.assertEqual(crash.signature, 'crashedFunc()')
82
83
    @temporary_media_root(
84
        MEDIA_URL='http://omaha-test.s3.amazonaws.com/',
85
        CRASH_S3_MOUNT_PATH=TEST_DATA_DIR,
86
        CRASH_SYMBOLS_PATH=SYMBOLS_PATH,
87
    )
88
    @freeze_time("2014-12-11")
89
    @patch('crash.utils.send_stacktrace_sentry')
90
    @patch('crash.utils.client')
91
    @patch('uuid.uuid4', lambda: '92d51f8b-f67a-4d80-ac7f-9ab8018297d9')
92
    def test_incorrect_dump(self, mock_send_stacktrace_sentry, mock_client):
93
        meta = dict(
94
            lang='en',
95
            version='1.0.0.1',
96
        )
97
        app_id = '{D0AB2EBC-931B-4013-9FEB-C9C4C2225C8C}'
98
        user_id = '{2882CF9B-D9C2-4edb-9AAF-8ED5FCF366F7}'
99
        with open(INCORRECT_CRASH_DUMP_FILE, 'rb') as f:
100
            obj = dict(
101
                appid=app_id,
102
                userid=user_id,
103
                upload_file_minidump=SimpleUploadedFile('incorrect_minidump.dmp', f.read()),
104
                meta=meta,
105
            )
106
            self.assertRaises(CommandError, Crash.objects.create, **obj)
107
108
    @temporary_media_root(
109
        MEDIA_URL='http://omaha-test.s3.amazonaws.com/',
110
        CRASH_S3_MOUNT_PATH=TEST_DATA_DIR,
111
        CRASH_SYMBOLS_PATH=SYMBOLS_PATH,
112
    )
113
    @test.override_settings(CELERY_ALWAYS_EAGER=False,)
114
    @freeze_time("2014-12-11")
115
    @patch('crash.utils.send_stacktrace_sentry', lambda: None)
116
    @patch('crash.utils.client')
117
    @patch('uuid.uuid4', lambda: '92d51f8b-f67a-4d80-ac7f-9ab8018297d9')
118
    def test_get_sentry_link(self, mock_client):
119
        meta = dict(
120
            lang='en',
121
            version='1.0.0.1',
122
        )
123
        app_id = '{D0AB2EBC-931B-4013-9FEB-C9C4C2225C8C}'
124
        user_id = '{2882CF9B-D9C2-4edb-9AAF-8ED5FCF366F7}'
125
        with open(CRASH_DUMP_FILE, 'rb') as f:
126
            obj = Crash.objects.create(
127
                appid=app_id,
128
                userid=user_id,
129
                upload_file_minidump=SimpleUploadedFile('7b05e196-7e23-416b-bd13-99287924e214.dmp', f.read()),
130
                meta=meta,
131
            )
132
        with patch('requests.get') as mocked:
133
            instance = mocked.return_value
134
            instance.json.return_value = {'groupID': '1', 'id': '2'}
135
            get_sentry_link(obj.pk, '123')
136
        obj = Crash.objects.get(id=obj.id)
137
        self.assertEqual(obj.eventid, '2')
138
        self.assertEqual(obj.groupid, '1')
139