Completed
Pull Request — master (#253)
by
unknown
02:09
created

SymbolsS3Test.setUp()   A

Complexity

Conditions 1

Size

Total Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
c 0
b 0
f 0
dl 0
loc 2
rs 10
1
from django.test import TestCase, override_settings
2
3
import moto
4
import boto
5
import mock
6
7
from crash.factories import CrashFactoryWithFiles, SymbolsFactory
8
from feedback.factories import FeedbackFactory
9
from omaha.factories import VersionFactory
10
from sparkle.factories import SparkleVersionFactory
11
12
from crash.models import Crash, Symbols
13
from feedback.models import Feedback
14
from omaha.models import Version
15
from sparkle.models import SparkleVersion
16
17
from omaha.limitation import bulk_delete
18
19
class BaseS3Test(object):
20
    model = None
21
    factory = None
22
    file_fields = None
23
24 View Code Duplication
    @moto.mock_s3
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
25
    def test_model_delete(self):
26
        conn = boto.connect_s3()
27
        conn.create_bucket('test')
28
        obj = self.factory()
29
30
        keys = conn.get_bucket('test').get_all_keys()
31
        keys = [key.name for key in keys]
32
        for field in self.file_fields:
33
            self.assertIn(getattr(obj, field).name, keys)
34
35
        obj.delete()
36
        keys = conn.get_bucket('test').get_all_keys()
37
        self.assertFalse(keys)
38
39 View Code Duplication
    @moto.mock_s3
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
40
    def test_model_update(self):
41
        conn = boto.connect_s3()
42
        conn.create_bucket('test')
43
        obj = self.factory()
44
        new_obj = self.factory()
45
46
        old_keys = conn.get_bucket('test').get_all_keys()
47
        old_keys = [key.name for key in old_keys]
48
49
        for field in self.file_fields:
50
            self.assertIn(getattr(obj, field).name, old_keys)
51
            setattr(obj, field, getattr(new_obj, field))
52
            obj.save()
53
54
        new_keys = conn.get_bucket('test').get_all_keys()
55
        self.assertFalse(set(old_keys) & set(new_keys))
56
57
    @moto.mock_s3
58
    def test_bulk_delete(self):
59
        conn = boto.connect_s3()
60
        conn.create_bucket('test')
61
        self.factory.create_batch(10)
62
        qs = self.model.objects.all()
63
        self.assertEqual(qs.count(), 10)
64
        keys = conn.get_bucket('test').get_all_keys()
65
        self.assertEqual(len(keys), len(self.file_fields) * 10)
66
        with mock.patch('boto.__init__') as my_mock:
67
            my_mock.connect_s3.return_value = conn
68
            try:                                    # When we try to delete nonexistent key from s3 in pre_delete signal
69
                bulk_delete(self.model, qs)         # original boto doesn't raise S3ResponseError: 404 Not Found
70
            except boto.exception.S3ResponseError:  # but mocked boto does
71
                pass
72
73
        keys = conn.get_bucket('test').get_all_keys()
74
        self.assertFalse(keys)
75
76
77
@override_settings(DEFAULT_FILE_STORAGE='storages.backends.s3boto.S3BotoStorage')
78
class CrashS3Test(BaseS3Test, TestCase):
79
    model = Crash
80
    factory = CrashFactoryWithFiles
81
    file_fields = ['archive', 'upload_file_minidump']
82
83
84
@override_settings(DEFAULT_FILE_STORAGE='storages.backends.s3boto.S3BotoStorage')
85
class FeedbackS3Test(BaseS3Test, TestCase):
86
    model = Feedback
87
    factory = FeedbackFactory
88
    file_fields = ['screenshot', 'blackbox', 'system_logs', 'attached_file']
89
90
@override_settings(DEFAULT_FILE_STORAGE='storages.backends.s3boto.S3BotoStorage')
91
class SymbolsS3Test(BaseS3Test, TestCase):
92
    model = Symbols
93
    factory = SymbolsFactory
94
    file_fields = ['file']
95
96
97
@override_settings(DEFAULT_FILE_STORAGE='storages.backends.s3boto.S3BotoStorage')
98
class OmahaVersionS3Test(BaseS3Test, TestCase):
99
    model = Version
100
    factory = VersionFactory
101
    file_fields = ['file']
102
103
104
@override_settings(DEFAULT_FILE_STORAGE='storages.backends.s3boto.S3BotoStorage')
105
class SparkleVersionS3Test(BaseS3Test, TestCase):
106
    model = SparkleVersion
107
    factory = SparkleVersionFactory
108
    file_fields = ['file']
109